assign
设置方法只会执行对“纯量类型”的简单赋值操作
strong
此特质表明该属性定义了一种“拥有关系”,这种属性设置新值得时候,设置方法会先保留新值,并释放旧值,然后再将新值设置上去。
weak
此特质表明该属性定义了一种“非拥有关系”,为这种属性设置新值的时候,设置方法即不保留新值,也不释放旧值。此特质同assign类似,然而在属性所指的对象遭到摧毁的时候,属性值也会清空。
unsafe_unretained
此特质的语义和assign相同,但是它适用于“对象类型”,该特质表达一种“非拥有关系”(不保留),当目标对象遭到摧毁的时候,属性值不会自动清空(不安全,unsafe),这一点与weak有区别。
copy
此特质所表达的所属关系与strong类似,然而设置方法并不保留新值,而是将其“拷贝”。当属性类型为NSString*时候,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能纸箱一个NSMutableString类的实例。
#import "TestObject.h"
@interface TestObject()
{
}
@property (retain, nonatomic) NSObject *aObject;
@property (copy, nonatomic) NSString *name;
@property (assign, nonatomic) int age;
@end
@implementation TestObject
- (void)setAObject:(NSObject *)aObject // retain setter method
{
if (_aObject != aObject)
{
[_aObject release];
_aObject = [aObject retain];
}
}
- (void)setName:(NSString *)name // copy setter method
{
if (_name != name)
{
[_name release];
_name = [name copy];
}
}
- (void)setAge:(int)age // assign setter method
{
_age = age;
}
- (void)dealloc
{
[super dealloc];
}