strong和copy
阿新 • • 發佈:2018-11-06
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
.