鱼人学习小计(四)
2017-07-24 本文已影响0人
鱼人敲代码
内存管理:
因为手机硬件的内存及其有限,当一个程序占用内存过高时,系统会发出警告。为了更好的用户体验,ios引入了内存管理的概念。ios主要通过引用计数器实现对oc对象的内存管理,这种引用计数器通常只作用在oc对象上而非基本数据类型,因为数据类型对象一般存放在栈上,当代码块结束时,代码块所涉及的所有局部变量会弹栈清空,指向对象的指针也会被回收,而存放在堆上的oc对象虽然没有指针指向,但仍存在与内存中,容易造成内存泄漏。
mrc:由开发人员手动retain和release操作引用计数。
arc:自动生成retain和release操作代码,判断原则为 没有强指针指向的对象则会被自动释放。
block中的内存管理,详见http://www.jianshu.com/p/ba825ef44d60
autoreleasepool自动释放池
mrc下,调用autorelease方法会将对象放入自动释放池内,当自动释放池释放时,会对池内所有变量做一次release操作。每个runloop都会自动产生一个自动释放池,当现runloop休眠或者迭代结束的时候,main 释放池会自动释放,当runloop唤醒或初始化时,会自动产生一个新释放池。释放池是栈序排列的,新创建的池会放在栈顶,优先释放。当遇到频繁创建临时对象时可考虑用自动释放池避免内存泄漏。