iOS之property里的copy、strong区别

Objective-C中mutableCopy和copy的理解讲述了深拷贝和浅拷贝,就容易理解property里的copy、strong了。

    #import <Foundation/Foundation.h>

    @interface ZJPerson : NSObject

    @property (nonatomic,copy) NSString * name;

    @property (nonatomic,strong) NSString * StrongName;

    @end

测试如下:

    NSMutableString * name = [NSMutableString stringWithFormat:@"iOS俱哥"];
    
    ZJPerson * p = [[ZJPerson alloc]init];
    p.name = name;
    p.StrongName = name;
    // 不能改变p.name的值,因为其内部copy新的对象
    //改变了p.StrongName的值,因为StrongName和name指向了同一块内存
    [name appendString:@"!!!"];
    
    NSLog(@"p.name = %@",p.name);
    NSLog(@"p.StrongName = %@",p.StrongName);
    
    NSLog(@"name:%p,p.name:%p,p.StrongName:%p",name,p.name,p.StrongName);

注:在strong情况下,如果外部被引用的变量更改了,那里面这个值也会更改,因为两个属性指向同一块内存空间 。在这里strong 属于浅拷贝,只复制对象的指针。
为了防止外界无意间修改和name指向的值,就用copy,因为copy是生成了一份新的内存空间,所以即使指向的可变字符串改变后name指向的值也不会被改变。

截图

在这里给出一道常见面试题,看了上述的讲解,这道题就能很好地理解了:

用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?

答:用@property声明 NSString、NSArray、NSDictionary 经常使用copy关键字,是因为他们分别有对应的子类是可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

如果我们使用是strong,那么这个属性就有可能指向一个可变对象的子类,如果这个可变对象在外部被修改了,就会影响该属性。

copy在此此特质所表达的所属关系与strong类似。

指向一个NSMutableString类的实例: 设置方法并不保留新值,而是将其“拷贝” (copy)。
指向一个NSString类的实例:是指针复制,指向同一个地址。

因为传递给设置方法的新值有可能指向一个NSMutableString类的实例。避免值有变动,所以用copy

NSMutableString是NSString的子类,表示一种可修改其值的可变字符串。

此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。如果目标是不被改变,就应该在设置新属性值时拷贝一份。

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 今早起床,感觉空气清新了不少,深深吸一口,开始一天忙碌的生活。我们所有队员都是7点半准时从学校南苑北门出发,赶往紫...
    仰望1727埃菲尔塔的云阅读 187评论 0 0
  • 2017-07-01 在互联网时代,我们有机会低成本的链接几千、几万乃至更多的人。那么,我们要如何经营这些关系,使...
    一粟于海阅读 317评论 0 3
  • 一个人坐在寝室,准备听听歌的,一时不知道听什么,突然想听马头琴曲了,随后就点开网页,搜了马头琴民曲就在听,听着听着...
    情怀卷毛阅读 1,248评论 4 2
  • 这个世界上从来没有绝对的唯一真理,只有你自己的真理。你相信的,你遵从的,就是你的真理,你的真理不是我的真理,我的真...
    寂照惟心力阅读 846评论 0 0
  • 人以群分。 好消息是:群内,字字投机。 坏消息是:群外,半句都多。 他:我跟你说啊, 。。。。。。。。。。。。 我...
    GoodNineNine阅读 317评论 0 1