strong和copy
通常情况下,
NSString
和
NSArray
会使用
copy
关键字修饰.
代码实例:
//定义Person类
@interface Person : NSObject
@property (nonatomic, strong) NSArray *array1;
@property (nonatomic, copy) NSArray *array2;
@end
//在ViewController中
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableArray *arrayM = [NSMutableArray arrayWithObject:@"one"];
Person *person = [[Person alloc] init];
person.array1 = arrayM;
person.array2 = arrayM;
[arrayM addObject:@"two"];
NSLog(@"\n array1:%@ \n array2:%@ \n", person.array1, person.array2);
}
@end
最终打印结果为:
array1:(
one,
two
)
array2:(
one
)
当使用strong
时,array1
和arrayM
都指向同一块内存区域,当arrayM
改变时,array1
的内容也会改变,两者是一样的
当使用copy
时,array2
在赋值之前,将arrayM
内容复制,创建一块新的内存空间,所以两者不同,不会随它改变
归根结底,不同修饰符,对应的setter
方法不同
strong
对应的setter
方法,是将_property
先release
([_property release]
),然后将参数retain
([property retain]
),最后_property = property
.
copy
对应的setter
方法,是将_property
先release
([_property release]
),然后将参数内容copy
([property copy]
),创建一块新的内存地址,最后_property = property
.