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

@property(nonatomic, strong) NSString *name;

@property(nonatomic, copy) NSSting *name;

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

阅读 3.8k
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的作用应该显而易见了.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题