OC的关键字
开发中遇到了一些不常见的关键字,原来只是一知半解,所以做了一些功课,总结了以下。
@encode()
在使用NSNumber
时,很可能会遇到这个关键字。在用masonry
时,也发现了这个关键字的使用场景。我们可以把int
、BOOL
等封装成NSNumber
对象,但是翻过来,我们怎么知道NSNumber
内封装的到底是什么原型的数据呢。就会用到@encode()
。
Objective-C 的数据类型,甚至自定义类型、函数或方法的元类型,都可以使用ASCII
编码。@encode(aType)
可以返回该类型的C
字符串(char *)
的表示。使用举例如下:
@class
这个关键字我用的很多,总而言之一句话,.h
文件内,能用@class
就别导入头文件。
@dynamic
这个关键字是相对于@synthesize
的,用于动态合成property
。编译器不会合成accessor
,runtime
时动态解析。
@defs
这个关键字把OC对象转化成对应的struct
结构体。这个struct
与原OC
类具有相同的内存布局。OC
类底层也是C struct
和一些方法的封装。涉及非常底层的操作或优化的时候才会用到。示例代码如下:
struct { @defs( NSObject) }
@autoreleasepool
用于ARC
下代替NSAutoreleasePool
的关键字。一般用于降低app的内存峰值,包裹敏感代码。
@compatibility_alis
用于给一个类设置一个别名。这样就不用重构以前的类文件就可以用新的名字来替代原有名字。示例代码如下
@compatibility_alias AliasClassName ExistingClassName
附:OC保留的关键字列表
扩展阅读