在ios中我们一般用ARC或MRC进行内存管理,ARC(个人认为真是个伟大的发明)意思是自动引用计数器,MRC(现在很少项目用)就是手动引用计数器。说到内存管理与它关联的就是关键字,这里我主要针对ARC来说。
那我们先说说assgin、copy、retain。
(1)assgin 只赋值,不改变索引计数,一般用于基础数据
相当于为对象添加了别名,有点不安全啦,要注意,只要有其中一个释放了,其它都不知道,会产生野指针
(2)copy 建立索引为1的新对象,释放旧对象,一般用于字符串对象和block块(闭包)
相当于内存地址的复制,使用copy创建索引计数为1相同值的内存地址
(3)retain 释放旧对象,将值赋于输入对象,再增加输入对象的索引计数为1
相当于指针的赋值,多个指针指向同一块内存地址,使用retain索引计数增加1
copy、retain两个之间有什么区别呢,用一个网上的说法,使用copy相当于复制一个一模一样的人,以后他长多高或者有什么变化都与你无关,而retain呢,相当于你的影子,你有多高他有多高,你有多胖,他有多胖。
然后我们来说说strong和weak的区别
(4)strong 修饰强引用与retain雷同一般用于数组对象、字典对象等
(5)weak 修饰弱引用一般用于UI组件
strong、weak两个有什么区别,举个网上的例子,strong就像有很多人用绳子牵着同一条狗,只有全部人都放开了绳子,那条狗才会走掉(相当于内存释放),weak就像旁边看狗的人,只有人家牵着狗它才能看到狗,它没有权利决定狗的去留,主要的区别就是有没有决定内存的释放,假设一个对象中拥有两个strong的成员变量与多个weak成员变量,只要两个strong的内存都释放,那么不管有多少个weak成员变量对象都会释放掉!