开发者社区> 问答> 正文

谁能清楚的解释一下对于NSString对象这种,copy和strong属性有什么不同吗?

@property(nonatomic, strong) NSString *name;

@property(nonatomic, copy) NSSting *name;

我理解copy是深拷贝的意思~但是不明白为什么为什么要使用copy,使用strong有没有问题呢?

展开
收起
a123456678 2016-07-28 10:07:44 1967 0
1 条回答
写回答
取消 提交回答
  • copy赋值时会开辟一个新的内存区域,而 strong 则不会。使用 copy 可以防止不可变的属性被赋值的是可变的数据时,因为可变数据的改变而改变属性的值。举个例子

    @interface Test : NSObject
    @property (nonatomic,strong) NSString *str1;
    @property (nonatomic,copy) NSString *str2;
    @end
    
    #import <Foundation/Foundation.h>
    #import "Test.h"
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            NSMutableString *str = [NSMutableString stringWithString:@"hello"];
            Test *test = [[Test alloc]init];
            test.str1 = str;
            test.str2 = str;
            [str appendString:@" world"];
            NSLog(@"str:%@ str1:%@ str2:%@",str,test.str1,test.str2);
        }
        return 0;
    }

    这段代码的输出结果是: str:hello world str1:hello world str2:hello
    copy的作用应该显而易见了.

    2019-07-17 20:01:03
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载