欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 属性知识之为什么要使用copy特性

程序员文章站 2022-07-01 08:43:51
iOS 属性知识之为什么要使用copy特性 @property (nonatomic, strong) NSString *name; @property (nonatomic...

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);

}