@property中的 strong retain copy weak 和assign

来源:互联网 发布:观看网络直播人群分析 编辑:程序博客网 时间:2024/04/28 08:04

ratain copy assign 的本质在MRC中set方法可以模拟:

//浅copy 只复制了变量指针  @property(NSString *)name- (void)setName:(NSString *)name{    if (name!=_name) {        [_name release];        _name=[name  copy];    }}//深copy  复制了对象指向的内存   @property(NSMutableString *)name2- (void)setName2:(NSMutableString *)name2{    if(_name2!=name2){        [_name2 release];        _name2=[name2 mutableCopy];    }}//assign 直接复制 @property(int)age- (void)setAge:(int)age{    _age=age;}- (int)age{    return _age;}//retain 和浅copy一样只复制了指针// @property(Dog*)dog- (void)setDog:(Dog *)dog{    if (_dog!=dog) {        [_dog release];        _dog=dog;        [_dog retain];    }}


strong 和 retain 相似 在引入ARC之后引入strong 


weak 和 assign 相似 区别:

1.weak 和 assign差不多 assign直接赋值 不参与内存管理,weak 不对内存拥有所有权,内存被清空 他也会被清空,

2.weak不可以用于非oc对象,assign可以用于非oc对象

一般用 assign 用于 int  nsInteger float 等数值型变量,strong用于自定义的类的对象,除NSString其他的系统对象,copy一般用于NSString对象类型,weak 可以用于代理模式中放置对象的重复引用,自定义IBOutlet控件 等



0 0