objective-c - Object c里的copy属性为什么返回的对象不是深拷贝的?

查看:72
本文介绍了objective-c - Object c里的copy属性为什么返回的对象不是深拷贝的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

对象声明为

@interface MyClass : NSObject
@property (atomic, copy) NSMutableString *name;
@end

定义为

@implementation MyClass
@synthesize name;
@end

调用

MyClass *m = [[MyClass alloc] init];
NSMutableString *s = [[NSMutableString alloc] initWithString:@"Hello"];
[m setName:s];
NSLog(@"%p", [m name]);
NSLog(@"%p", [m name]);
NSLog(@"%p", [m name]);

如果说copy每次返回的对象对于可变字符串都是深拷贝的话,为什么打印的地址是一样的?

解决方案

copy是指在赋值的时候进行一次copy操作,你可以再尝试打印下s的地址,
ps: mutable类型的属性别用copy

这篇关于objective-c - Object c里的copy属性为什么返回的对象不是深拷贝的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆