iOS 浅谈Strong、Copy 和 mutableCopy

    在iOS的王国里,Strong、Copy和mutableCopy在我们的使用过程中,缺一不可的。接下来来介绍一下它们之间的关系和注意点。

一、Copy和mutableCopy之拷贝

    在生活中,时常会用到一个词“拷贝”。例如:微信群里、朋友圈很多人会分享同一篇的文章或者是活动内容,这是一种“拷贝”。这就是类似于浅拷贝“Copy”。当你一个好朋友对你说,把你那个项目给我拷一份,这就是类似于深拷贝”mutableCopy“。

浅拷贝(Copy):指针拷贝,不产生新的对象,源对象的引用计数器+1;

深拷贝(mutableCopy):对象的拷贝,会产生新的对象,源对象的引用计数器不变。

判断是浅拷贝和深拷贝就看两个变量的内存地址是否一样,一样就是浅拷贝,不一样就是深拷贝,也可以改变一个变量的其中一个属性值看两者的值是否发生变化。

系统原生的对象深浅拷贝区别

    NSObject类提供Copy和mutableCopy方法,通过这两个方法即可拷贝已有对象的副本,主要的系统原生对象有:NSString和NSMutableString、NSArray和NSMutableArray、NSDictionary和NSMutableDictionary、NSSet和NSMutableSet,NSValue和NSNumber只遵守的NSCoping协议。

注意:基本数据类型(assign修饰),没有对应的指针(假象),直接赋值操作,无需copy操作。

二、Copy和Strong区别

    在OC中经常会碰到定义一个属性property,使用copy、strong这两个词。

    在系统原生对象中:NSString和NSMutableString、NSArray和NSMutableArray、NSDictionary和NSMutableDictionary、NSSet和NSMutableSet的使用这两个词的区别。NSString、NSArray、NSDictionary、NSSet都使用Copy这个修饰词,而NSMutableString、NSMutableArray、NSMutableDictionary和NSMutableSet则使用Strong修饰。

@property 中的copy 参数的作用:

在属性的setter实现中对赋值对象做一次copy操作,将copy操作的结果赋值给属性。

情况一:属性是不可变类型的:如:NSString、NSArray、NSDictionary、NSSet

    如果赋值对象是可变的,那么将一个不可变的副本赋值给属性。

    如果赋值对象是不可变的,那么不会产生新的副本,只是对复制对象引用计数器加1。

情况二:属性是可变类型的,建议不要使用copy参数

    可变类型的属性会根据需求对其内容进行修改,使用copy属性的对象类型是不可变的。如果修改这个属性,编译是不会报错,但是运行会奔溃。因为尝试修改一个不可变的对象。

情况三:自定义对象类型,一般情况下不会对自定义的对象使用copy参数。

    必须遵守<NSCopying>协议,实现CopyWithZone:方法,才能调用Copy方法,创建副本。


总之:Strong、Copy 和 mutableCopy这三者之间,需要从底层考虑。OC是一个动态的面向对象语言,C语言是OC的底层实现。Strong主要是对一个堆对象添加一个引用点,Copy和MutableCopy主要是从拷贝内容着手,是否创建新的内容空间。

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

推荐阅读更多精彩内容

  • 春日烂漫,和好友带了娃娃一起踏春,不得不说越来越爱这山,这水,这人。 40分钟的车程就到了目的地,田间房后樱桃花灿...
    冰雪原野阅读 245评论 2 3
  • 文/济安 现在30岁了,经历了一些生活的经验;目前安静下来,重新去理顺自己的生命状态,这时候会问自己,我是谁,我的...
    流淌的溪水阅读 310评论 0 0
  • 【经文】但圣灵降临在你们身上,你们就必得著能力,并要在耶路撒冷、犹太全地和撒马利亚,直到地极,作我的见证。」(使徒...
    斐斐feifei阅读 1,041评论 0 1
  • 抓住细节是关键。 列夫托尔斯泰曾经讲到过:“我在生活中到处寻找细节,如果把我的作品比做编织好的生活网,那么细节就是...
    守望小确幸阅读 491评论 6 11
  • 《这是你的船》-29 在大多数人看来,海军舰长的工作就是穿上带金边的军服,然后冲着下属发号施令。可事实并非如此...
    合肥李风丽阅读 283评论 10 0