iOS 属性知识之为什么要使用copy特性
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);
}