iOS 5中的strong和weak关键字

时间:2022-09-14 17:05:09

iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性

strong 用来修饰强引用的属性;

@property (strong) SomeClass * aObject; 
对应原来的 
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject; 

weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject; 
对应原来的 
@property (assign) SomeClass * aObject; 

__weak, __strong 用来修饰变量,此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。
__strong 是缺省的关键词。
__weak 声明了一个可以自动 nil 化的弱引用。
__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。


使用ARC时,需要遵循一定的规则:

  • 不能使用retain/release/retainCount/autorelease方法
  • 不能使用NSAllocateObject/NSDeallocateObject方法
  • 不能显示的调用dealloc方法
  • 使用@autoreleasepool块代替NSAutoreleasePool
  • 不能使用NSZone(防止内存碎片化而引入的结构)
  • 显示转换"id"和"void *"

引申阅读:
Beginning ARC in iOS 5 Tutorial Part 1: http://www.raywenderlich.com/zh-hans/20855/ios-5-arc-%E5%85%A5%E9%97%A8-13