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