首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

内存管理(1)

内存管理(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是如下)
返回列表