活动加载类,宏的使用

by admin on 2019年1月31日

以下是进阶篇的情节:面向对象的宏图标准,自动加载类,类型提示,traits,命名空间,spl的选择,反射的施用,php常用设计方式

其三方的行使,第三方使用

1. MMDrawerController  抽屉效果
2.SVProgressHUD  透明指示层
3.SDCycleScrollView 无限轮播器
4.SDWebImage 异步图片加载
5.RESideMenu 抽屉效果
6.AFNetworking 网络请求
7.MJRefresh tableView上下拉刷新
8.MJExtension json转模型
9.Masonry 布局适配框架
10.UMengSocial 友盟SDK
11.TPKeyboardAvoiding 键盘与输入框的位置修改
12.XYPieChart 饼状图
13.UUChartView 折线图
14.IQKeyboardManager 输入框在键盘弹出的时候处理显示位置

1. MMDrawerController
抽屉效果 2.SVProgressHUD 透明提示层 3.SDCycleScrollView 极其轮播器
4.SDWebImage 异步图片加载 5.RESide…

宏的使用,使用

2. npm 的使用,npm使用

NPM是及其NodeJS一起安装的包管理工具,能化解NodeJS代码计划上的浩大题材,常见的选取情形有以下三种:

  • 允许用户从NPM服务器下载旁人编写的第三方包到地点利用。
  • 同意用户从NPM服务器下载并安装外人编写的吩咐行程序到当地利用。
  • 同意用户将自己编排的包或指令行程序上传到NPM服务器供别人使用。

鉴于新版的nodejs已经合并了npm,所以在此之前npm也一并设置好了。同样能够通过输入
“npm -v” 来测试是或不是成功安装。命令如下,出现版本提醒表示安装成功:

$ npm -v
2.3.0

活动加载类,宏的使用。 ==============================================

前言

宏在C/C++中有挺大的功用。

关键词

 

采纳 npm 命令安装模块

npm 安装 Node.js 模块语法格式如下:

$ npm install <Module Name>

以下实例,大家利用 npm 命令安装常用的 Node.js web框架模块 express活动加载类,宏的使用。:

$ npm install express

设置好之后,express 包就位于了工程目录下的 node_modules
目录中,由此在代码中只要求经过 require(‘express’)
的点子就好,无需指定第三方包路径。

var express = require('express');

 

宏的三种功用

1,定义常量

2,定义表明式

3,简化繁琐的代码

4,作为标识符

5,可变参数

6,#和##的使用

 

1,定义常量

比如定义PI的值可以由此宏来定义

#define PI    3.1415927

2,定义表明式

#define MAX(a, b)    (a>b?a:b)

3,简化繁琐的代码

其一可以简化一些重新的代码,比如声明函数,定义类的成员变量,或者是简化数十次编纂重复性高的代码。

简化函数申明,在函数申明的时候有点需要的首要字须要写,然而洋洋时候都是如出一辙的,可以透过宏来简化

定义线程函数

unsigned __stdcall ThreadFunc(void* pArguments)

可以经过宏简化为

#define THREAD_FUNC(func)    unsigned __stdcall func(void* pArguments)

THREAD_FUNC(ThreadFunc)
{
    printf("hello\n");
    return 0;
}

 

定义类的分子变量,可能必要定义成员变量的get,set函数,那时候可以经过宏来简化那几个进程。

#define PROP_DECL(ClassName, Prop)    \
    public: ClassName Get##Prop(void){return m_##Prop;}\
    public: void Set##Prop(ClassName vl){m_##Prop = vl;}\
    private: ClassName m_##Prop;

class CTestObj
{
    PROP_DECL(int, Count)
public:
    CTestObj();
    ~CTestObj();
};

上边的代码通过预编译之后就会产生GetCount和SetCount四个函数和m_Count私有成员变量。

简化繁琐代码,在内存释放的时候可能必要把指针,必要两行代码

WA *pa = new WA(c);
delete pa;
pa = NULL;

可以选拔宏来简化这么些进度

#define MEM_FREE(x)    do \
{\
    delete x;\
    x = NULL;\
} while (0)

WA *pa = new WA(c);
MEM_FREE(pa);

在ATL,MFC中大批量行使到宏来简化代码。

4,作为标识

用作标识的宏在大批量的运用

#ifndef __TMP_H__    //判断是否已经定义宏,如果没有,将会执行下面代码,用于避免包含文件的时候重复包含
#define __TMP_H__    //定义宏,这样第二次包含这个头文件的时候就不会执行下面的定义

//判断是否是UNICODE,用于定义TTCHAR的字符类型。
#ifdef UNICODE        
typedef wchar_t TTCHAR;
#else
typedef char TTCHAR;
#endif

//用于标识的宏定义
#define    IN
#define OUT

#endif // !__TMP_H__

 

4,可变参数

宏可以有参数,而且参数数量得以不定

#define LOG(format, ...)    printf(format, __VA_ARGS__)

LOG("hello, %d, %s\n", 10, "nihao");

5,#和##的使用

#的成效是把宏参数变成字符串

#define STR(s)     #s
printf(STR(hello));           // 输出字符串"hello"

##的功效是把宏参数粘贴起来例子可以参照一下第三点的代码。

 

应用宏必要专注的点

宏是在预处理进度中开展存文本替换,预处理进度中不会对宏进行任何的语法检测,却个括号,少个支行都不会管,所以可能会产出一些很奇怪的谬误,所以要慎用。

1,算法优先难点

一个乘法的宏

#define MUL(x, y)    (x * y)

MUL(2,3)的时候从不难点,即使是MUL(1+2,
3)的时候就出事了,宏会替换成1+2*3,跟预想的结果就不等同了。

此刻就须求把宏定义改成

#define MUL(x, y) (x) * (y)

2,分号吞噬难题

#define SKIP_SPACES(p, limit)  \
     { char *lim = (limit);         \
       while (p < lim) {            \
         if (*p++ != ' ') {         \
           p--; break; }}}

一经下面的代码放在判断语句中利用

if (*p != 0)
   SKIP_SPACES (p, lim);
else ...

编译器会报错,else此前要有if,可以经过上面代码来解决

#define SKIP_SPACES(p, limit)     \
     do { char *lim = (limit);         \
          while (p < lim) {            \
            if (*p++ != ' ') {         \
              p--; break; }}}          \
     while (0)

那种方法在linux中多量用到到

 

3,重复调用

#define min(X, Y)  ((X) < (Y) ? (X) : (Y))

假定调用时那样

int x = 1;
int y = 2;
min(x++, y);

进行后x++会被调用两遍,那种办法要防止。

bf88必发唯一官网, 

4,对自身的递归引用

有如下宏定义:

#define foo (4 + foo)

按前边的敞亮,(4 + foo)会进展成(4 + (4 +
foo),然后直接进展下去,直至内存耗尽。可是,预处理器采纳的方针是只举办一遍。也就是说,foo只会进展成(4

  • foo),而举行将来foo的意思就要依据上下文来确定了。

对此以下的交叉引用,宏体也只会进行一次。

#define x (4 + y)
#define y (2 * x)

x展开成(4 + y) -> (4 + (2 * x)),y展开成(2 * x) -> (2 * (4 +
y))。

小心,那是极不推荐的写法,程序可读性极差。

 

5,宏参数预处理

宏参数中若包含此外的宏,那么宏参数在被代入到宏体此前会做三回完全的拓展,除非宏体中含有#或##。

有如下宏定义:

#define AFTERX(x) X_ ## x
#define XAFTERX(x) AFTERX(x)
#define TABLESIZE 1024
#define BUFSIZE TABLESIZE

AFTERX(BUFSIZE)会被开展成X_BUFSIZE。因为宏体中涵盖##,宏参数直接代入宏体。
XAFTERX(BUFSIZE)会被举行成X_1024。因为XAFTERX(x)的宏体是AFTERX(x),并从未#或##,所以BUFSIZE在代入前会被统统展开成1024,然后才代入宏体,变成X_1024。

 

宏实在预处理进度中被轮换掉的,所以在其实的编译进程中,不会出现宏,或者宏的变量名。

 

参考:

前言 宏在C/C++中有挺大的成效。
关键词 宏的两种效应 1,定义常量 2,定义表明式 3,简化繁琐的代码
4,作为标识符 5,可…

大局安装与当地安装

npm
的包安装分为地面安装(local)、全局安装(global)两种,从敲的命令行来看,差距只是有没有-g而已,比如

npm install express          # 本地安装
npm install express -g   # 全局安装

假设出现以下错误:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

解决办法为:

$ npm config set proxy null

当地安装

    1. 将安装包放在 ./node_modules 下(运行 npm
      命令时所在的目录),即便没有 node_modules 目录,会在现阶段执行 npm
      命令的目录下生成 node_modules 目录。
    1. 可以透过 require() 来引入本地安装的包。

全局安装

    1. 将安装包放在 /usr/local 下。
    1. 可以直接在命令行里使用。
    1. 无法透过 require() 来引入本地安装的包。

接下去我们拔取全局格局安装 express

$ npm install express -g

卸载模块

我们可以应用以下命令来卸载 Node.js 模块。

$ npm uninstall express

 

卸载后,你可以到 /node_modules/
目录下查看包是不是还留存,或者利用以下命令查看:

$ npm ls

更新模块

我们得以应用以下命令更新模块:

$ npm update express

招来模块

运用以下来搜索模块:

$ npm search express

NPM 常用命令

 
  • NPM提供了诸多指令,例如installpublish,使用npm help可查看所有命令。

  • 使用npm help <command>可查看某条命令的详细协理,例如npm help install

  • package.json遍地目录下行使npm install . -g可先在本土安装当前下令行程序,可用以公布前的当地测试。

  • 使用npm update <package>能够把当前目录下node_modules子目录里边的呼应模块更新至最新版本。

  • 使用npm update <package> -g可以把全局安装的应和命令行程序更新至最新版。

  • 使用npm cache clear可以清空NPM本地缓存,用于对付使用同样版本号公布新本子代码的人。

  • 使用npm unpublish <package>@<version>能够撤废公布自己公布过的某个版本代码。

 

 

 

. npm 的应用,npm使用
NPM是及其NodeJS一起安装的包管理工具,能缓解NodeJS代码布置上的过多题材,常见的施用处境有以下两种:
允许用户从…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图