YY_学习01

typeof 关键字是用来定义变量数据类型的

在GNU C 中支持直接写 typeof() 或者 __typeof() 或者 __typeof__()

iOS 使用Clang编译器,默认用的C语言版本是GNU99 ,并且允许'asm'inline''typeof'的选项设置为Yes。


#define debug(format, args...) fprintf (stderr, format, args)

在标准C里,你不能省略可变参数,但是你却可以给它传递一个空的参数。

debug (“A message”)

GNU CPP在这种情况下可以让你完全的忽略可变参数。在上面的例子中,编译器仍然会有问题(complain),因为宏展开后,里面的字符串后面会有个多余的逗号。

为了解决这个问题,CPP使用一个特殊的’##’操作。书写格式为:

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

如果可变参数被忽略或为空,’##’操作将使预处理器(preprocessor)去除掉它前面的那个逗号

##还可以起到替换作用
如:

1 #define FUN(IName)  IName##_ptr

这里将会把IName变成实际数据.


      这段话的意思就是:链接器在处理包含Category方法的UNIX的静态库时,没有将Category的方法链接到APP中,造成这个错误。具体的细节在本文的补充部分展开。      
        可以看出,解决这个错误的方法就是:将Category的方法链接到APP中,这样APP运行时,就能够找到对应的selector。而 –ObjC就可以完成这个任务。      
        "-ObjC"的作用是:将静态库中任何Objective-C代码都链接到APP中。任何Objective-C代码当然也包括Category的方法。可以看出,使用-ObjC可能会链接很多静态库中未被使用的Objective-C代码,极大的增加APP的代码体积。

这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_laod会强制 链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个只想静态库的路径。


_cmd在Objective-C的方法中表示当前方法的selector,正如同self表示当前方法调用的对象实例。


CFTypeRef

pthread_mutex_t

dispatch_time_t



你可能感兴趣的:(iOS)