iOS中的关键字,深拷贝和浅拷贝。

weak 和assign 的区别
weak修饰对象,assign可以修饰基本数据类型和对象 不过weak修饰对象,对象释放后weak会置为nil assign还是会这个对象的地址 出现野指针

block为什么使用copy
MRC下声明创建block,block会存放在栈中 需要copy修饰 存放到堆中 因为存放在栈中 block的生命周期会随着函数的结束出栈,此时再调用block 会崩溃 。拷贝的堆中就没事。ARC下写不写都行,ARC编译的时候会吧block放在堆中。

strong和retain
都是强引用 都会是引用计数加一 但是在声明block时不一样 声明block时 strong相当于copy retain相当assign

assign 用于基本数据类型 不改变引用计数 也可以修饰对象,但对象被释放后,指针的地址仍然是存在的 并没有置为nil 从而出现野指针 如果后面有对象正好分配到这一块地址上 就会Crash 之所以可以修饰基本数据类型 因为基本数据类型一般分配在栈上,栈的内存由系统自动处理,不会出现野指针。

weak 修饰对象 对象释放后,指针地址会被置为nil,不会产生野指针,是一种弱引用。在ARC下避免循环引用,delegate属性用weak修饰

__block 修饰对象 对象可以在block被重新赋值 可以修饰对象 也可以修饰基本数据类型

__weak 只在ARC下使用 只能修饰对象,弱引用 避免block循环引用。 假设一种情况,在 block代码块中 10秒后执行。在10秒前推出了控制器,此时会走dealloc方法,block就无法执行。 避免因为对象被销毁无法执行,应该在block中再次__strong强引用,retain引用计数加一,此时block仍然会执行,执行完成后才会走dealloc。

copy会在内存中拷贝一份对象,深拷贝和浅拷贝。
用copy修饰时 将可变的赋值给对象时,会先copy出一个不可变的副本,然后指针指向这个不可变的副本的内存地址。
如果用不可变的给对象赋值 则直接指向这个不可变的对象的内存地址。

用strong修饰时 将一个可变的赋值给对象时,并不会拷贝,而是直接指向这个可变的对象的内存地址。

copy和strong修饰字符串的区别
创建一个不可变字符串 使用不可变的NSString进行赋值 copy和strong没有区别 都是指向这个不可变的NSString的内存地址。
但使用可变的MSrting赋值时 copy会拷贝一个副本 然后指向这个副本 但是strong仍然会直接指向这个可变的MString, 因此如果此时修改MString的话,用strong修饰的字符串也会随之改变。但本身时创建的不可变字符串,所以用strong达不到要求。因此创建不可变字符串的时候用copy修饰。

可变字符串用strong去修饰 不可变字符串用copy去修饰
可变对象用strong去修饰,例如可变数组。不可变对象用copy修饰,例如不可变数组。

copy 与 mutableCopy 的区别
简单讲 copy就是拷贝出一份不可变的副本 mutableCopy就是拷贝出一份可变的副本
copy作用在一个不可变对象上的时候 不会拷贝一份不可变对象
mutableCopy作用在一个不可变的对象上的时候 就会拷贝出一份可变的对象,赋值时指向这个可变的对象。

copy作用在一个可变对象上的时候 会拷贝出一份不可变的对象 赋值时指向这个不可变的对象
mutableCopy作用在一个可变对象上的时候 会拷贝出一份可变的对象,赋值时指向这个可变的对象。

copy和mutableCopy作用在一个不可变的对象集合时,copy是浅拷贝,mutaleCopy是深拷贝,又拷贝出了新的对象。内部元素仅发生了浅拷贝,只拷贝了引用,内部元素存放的地址还原来的地址。

copy和mutableCopy作用在一个可变的对象集合时,虽然产生了一个副本,但内部元素仅发生了浅拷贝,只拷贝了引用,内部元素存放的地址还原来的地址。

浅拷贝只是拷贝了引用 深拷贝则整个对象包括内部元素都不一样

作用于集合类对象 无论是copy还时mutableCopy 区别仅仅在于copy产生了一个副本时不可变的,mutableCopy产生的副本时可变的 但是 内部元素都只是引用 并没有发生深拷贝

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

推荐阅读更多精彩内容

  • 参考文献《招聘一个靠谱的iOS》 深拷贝和浅拷贝 由上面的图我们可以明确地看出, 浅拷贝(Shallow copy...
    Terrnce阅读 1,817评论 2 10
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 关于iOS中对象的深拷贝和浅拷贝的文章有很多,但是大部分都是基于打印内存地址来推导结果,这篇文章是从源码的角度来分...
    雪山飞狐_91ae阅读 943评论 1 5
  • 作者:青蛙先森 家里住了一只咪咪叫小西 我说的不是大咪咪 而是小猫咪 至今它忧郁的眼神都是个谜 小西是个纯爷们儿 ...
    青蛙先森阅读 716评论 0 1
  • 与前妻相识于2000年,那个时候,我们东北小县城还没有现在这样物欲横流。我作为一个事业单位的小职员,觉得生活还是...
    Mr_Yang_阅读 154评论 0 0