Board logo

标题: 内存管理(1) [打印本页]

作者: look_w    时间: 2019-3-11 20:34     标题: 内存管理(1)

一.面试问题

    使用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是如下)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0