assign
"设置方法"只会执行针对“纯量类型”(例如:CGFloat 和 NSInteger)的简单赋值操作。没有引用计数
weak
此特质表明了该属性定义了一种“非拥有关系”,为这种属性设置新值时,设置方法既不保留新值也不释放旧值。此特质同assign类似,然而在属性所知道的对象遭到摧毁是,属性值也会清空
weak属性的管理方式:于海的视频
strong
此特质表明该属性定义了一种“拥有关系”,为这种属性设置新值时,设置方法会先保留新值,并释放旧值,然后再将新值设置上去
MRC中的保留新值释放旧值,并将新值设置上去的代码如下:
‘- (UITextField *) userName {
return userName;
}
- (void) setUserName:(UITextField *)userName {
[userName retain];
[_userName release];
_userName = userName;
}
// 先retain 后 release 是什么意思?
// 原因:加入self.userName = self.userName.如果我先执行release,self.name中的_userName给释放掉。self.name会被重置为nil
copy
此特质所表达的所属关系与strong类似。然而设置方法并不保留新值,而是将其copy.
当属性类型为NSString时,经常用此特质来保护其封装性,因为传递给设置方法的新值可能执行一个NSMutableString类的实例。
copy不能用来修饰NSMutableArray,因为copy的对象都会返回一个不可变类型。
网友评论