美文网首页
Property对应的关键字

Property对应的关键字

作者: c048e8b8e3d7 | 来源:发表于2016-07-23 15:09 被阅读10次

assign适用于基础数据类型(NSInterger...),不增加引用计数

copystrong的区别
先来看一个例子

@property(nonatomic, copy) NSString *cName;
@property(nonatomic, strong) NSString *sName;

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableString *str = [NSMutableString stringWithString:@"abc"];
    self.cName = str;
    self.sName = str;
    NSLog(@"str:%p,%p", &str, str);        0x7fff5d804aa8,0x7f81e2d11b10
    NSLog(@"cName:%p,%p", &_cName, _cName);0x7f81e2e8de20,0xa000000006362613
    NSLog(@"sName:%p,%p", &_sName, _sName);0x7f81e2e8de28,0x7f81e2d11b10
    
    [str appendFormat:@"def"];
    NSLog(@"str:%p,%p", &str, str);        0x7fff5d804aa8,0x7f81e2d11b10
    NSLog(@"cName:%p,%p", &_cName, _cName);0x7f81e2e8de20,0xa000000006362613
    NSLog(@"sName:%p,%p", &_sName, _sName);0x7f81e2e8de28,0x7f81e2d11b10
}

_cName指向的地址与str指向的地址不同,是因为copy修饰的变量指向的是str进行深复制后的对象地址。
如果把代码稍加修改

NSString *str = @"abc";
str = @"123";
str:  0x7fff5681faa8,0x1093e0078
cName:0x7fa863f96610,0x1093e0078
sName:0x7fa863f96618,0x1093e0078
str:  0x7fff5681faa8,0x1093e00f8
cName:0x7fa863f96610,0x1093e0078
sName:0x7fa863f96618,0x1093e0078

因为str不可变对象,所以重新赋值后str指向的地址也发生了变化
对于字符串来说,如果是赋值的对象是NSString类型的,那么用copystrong是一样的,如果赋值的是NSMutableString类型,那么可以根据需求来确定使用copystrong

相关文章

网友评论

      本文标题:Property对应的关键字

      本文链接:https://www.haomeiwen.com/subject/lwhwjttx.html