当前位置: 代码迷 >> 综合 >> @property中的 strong retain copy weak 和assign
  详细解决方案

@property中的 strong retain copy weak 和assign

热度:34   发布时间:2023-12-15 15:56:35.0

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控件 等



  相关解决方案