1 内存管理对象
值类型和引用类型
值类型:比如 int float struct 等基本数据类型 苹果内部自己管理。原因是内存都放在栈上面,是一块连续的存储地。遵循先进后出的原则。
引用类型:是继承NSObject类的所有OC对象。内存需要自己管理。(事故重发地),原因是内存放在堆上面,彼此之间有内存空隙,不是连续的。如果不管理收回,容易引起内存泄漏或者野指针的问题。
堆内存和栈内存之间的特点
堆内存空间大,不连续
栈内存空间小,连续,数量过大影响性能
2 内存管理方式
MRC 和 ARC
MRC:手工引用计数,所有对象都需要手动的 retain release 遵守谁创建谁回收。当retaincount为0,必须回收。不然内存泄漏。继续释放,就会野指针。
ARC:自动引用计数 系统会自动的释放对象,不需要release。
内存有关的修饰符
strong : 强引用 ,ARC中使用 ,与MRC中retain类似
weak : 弱引用 ,ARC使用 ,如果对象释放了,指向nil,避免野指针,比assign好一点。
assign : 弱引用 基本上应用于基本数据类型
retain : 持有类型,retain count + 1
copy : 拷贝特性,对象拷贝
nonatomic : 非原子特性,多线程访问,线程不安全
atomic : 原子特性,多线程安全,
readwrite : 读写,getter setter方法
readonly : 只读 生成getter 不生成setter方法
3 MRC和ARC的混编
ARC中使用MRC的文件,MRC文件添加编译选项-fno-objc-arc
相反 添加-fobjc-arc
文/SuperDKeng(简书作者)
原文链接:http://www.jianshu.com/p/d0daa511811c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。