ios ARC中strong与weak
比较常见的用法是在两个对象间存在包含关系时:对象1有一个strong指针指向对象2,并持有它,而对象2中只有一个weak指针指回对象1,从而避免了循环持有。一个常见的例子就是oc中常见的delegate设计模式,viewController中有一个strong指针指向它所负责管理的UITableView,而UITableView中的dataSource和delegate指针都是指向viewController的weak指针。可以说,weak指针的行为和MRC时代的assign有一些相似点,但是考虑到weak指针更聪明些(会自动指向nil),因此还是有所不同的。细节的东西我们稍后再说。
总结一下新加入的property的关键字类型:
- strong 和原来的retain比较相似,strong的property将对应__strong的指针,它将持有所指向的对象
 - weak 不持有所指向的对象,而且当所指对象销毁时能将自己置为nil,基本所有的outlet都应该用weak
 - unsafe_unretained 这就是原来的assign。当需要支持iOS4时需要用到这个关键字
 - copy 和原来基本一样..copy一个对象并且为其创建一个strong指针
 - assign 对于对象来说应该永远不用assign了,实在需要的话应该用unsafe_unretained代替(基本找不到这种时候,大部分assign应该都被weak替代)。但是对于基本类型比如int,float,BOOL这样的东西,还是要用assign。
 
特别地,对于NSString对象,在MRC时代很多人喜欢用copy,而ARC时代一般喜欢用strong…(我也不懂为什么..求指教)
                    
                

                
            
        
浙公网安备 33010602011771号