一.面试问题
使用CADisplayLink、NSTimer有什么注意点?
循环引用、NSTimer定时器不准
介绍下内存的几大区域
内存布局图、Tagged Poniter
讲一下你对 iOS 内存管理的理解
Tagged Poniter+ 第四部分
ARC 都帮我们做了什么?
ARC使用LLVVM编译器,自动生成release、retain
像weak弱引用这样的存在,runtime在程序运行的时候,weak修饰的对象要销毁时指针指为nil
所以ARC是LLVVM编译器和runtime系统相互协作的一个结果
weak指针的实现原理
1.把弱引用存储到SideTable的weak_table_t这个哈希表里面;
2.对象要dealloc销毁的时候,取出当前对象的弱引用表weak_table_t,把弱引用进行清除,指向当前对象的指针设置为nil
autorelease对象在什么时机会被调用release(详细看文末)
如果对象直接被autoreleasepool包住,那在autoreleasepool大括号结束的时候就release;
如果对象不是被autoreleaspool包住,释放是由runloop控制的。在所属的runloop循环中,runloop休眠之前调用release
方法里有局部对象, 出了方法后会立即释放吗(详细看文末)
如果是用autorelease的形式释放的话,是在所属的runloop休眠之前释放。
如果是arc下,出了方法就立即释放了。因为在方法结束的时候,方法给局部对象调用了release方法(如下,arc是如下) |