iOS 屬性知識之為什麼要使用copy特性
@property (nonatomic, strong) NSString *name;
@property (nonatomic, copy) NSString *meng;
@end
@implementation ViewController
– (void)viewDidLoad {
[super viewDidLoad];
[self testCopyAndStrong];
//[self testString];
}
– (void)testCopyAndStrong {
NSMutableString *str = [[NSMutableString alloc] initWithString:@"meng"];
self.meng = str;
self.name = str;
[str appendString:@"zhiqi"];
//實際上不可變字符串能拼接是因為它隻是用該字符串的副本來拼接
NSString *str1 = [str1 stringByAppendingString:@"mmm"];
//&打印指針的地址,沒有&則是打印指針所指向對象的地址
NSLog(@"%p, %p", str, &str);
//strong特性,指針地址不同,但是指針所指向對象的地址相同,是淺拷貝(地址拷貝)
NSLog(@"%p, %p", self.name, &_name);
//copy特性,指針地址不同,指針所指向的對象的地址也不同,是深拷貝(內容拷貝)
NSLog(@"%p, %p", self.meng, &_meng);
NSLog(@"%@", str);
//self.name打印出mengzhiqi,可見strong特性隻是把指針所指向對象的地址拷貝瞭
NSLog(@"%@", self.name);
NSLog(@"%@", self.meng);
}
– (void)testString {
NSString *str = @"meng";
self.meng = str;
self.name = str;
//&打印指針的地址,沒有&則是打印指針所指向對象的地址
NSLog(@"%p, %p", str, &str);
NSLog(@"%p, %p", self.name, &_name);
NSLog(@"%p, %p", self.meng, &_meng);
}