strong和weak 默认情况下,所有的实例变量和局部变量都是 strong 指针。strong指针表示拥有了所指对象的所有权,weak指针却没有所有权,当一个对象的所有者计数为0时,自动释放。 如典型的delegate就是weak指针,指向ViewController对象vc,当vc引用计数为0时就会释放,delegate也就为nil。
IBOutlet 使用strong还是weak? 在 ARC 中,一般outlet属性都推荐使用 weak,这个视图已经是视图控制器视图层级中的一部分了, 不需要在其他地方 retain 了。 声明 weak 的好处是, 省去了自己在viewDidUnload方法中添加self.xxx = nil。唯一需要声明为 strong 类型的 outlet 属性,就是在 nib 中从 File’s Owner 连接到顶级对象的那个。什么是File's Owner连接到的顶层对象呢?就是自定义的view(注意!),不是直接作为main view里面一个sub view直接显示出来,而是需要通过实例化创建出来的。你自己实例化,当然需要strong了,不然谁还替你保留对象所有权呢?
ARC其他属性的规则: strong:等同于"retain",属性成为对象的拥有者 weak:属性是 weak pointer,当对象释放时会自动设置为 nil unsafe_unretained:等同于之前的"assign",只有 iOS 4 才应该使用 copy:和之前的 copy 一样,复制一个对象并创建 strong 关联 assign:对象不能使用assign,但原始类型(BOOL、int、float)仍然可以使用。