美文网首页
第五章:内存管理

第五章:内存管理

作者: LucXion | 来源:发表于2016-11-04 19:37 被阅读0次

对象的强引用原理:

-(void)setPeople:(People *)people{
    [people retain];
    [_people release];
    _people = people;
}

ARC除了在编译期自动添加retain、release、autorelease,还做了以下优化:
简化成对出现的retain、release
赋值情况:当前的值和将要赋值的值相同,共用一片内存地址的情况,如果只有当前值引用了这个对象,那么release后对象直接被释放,进行后面的操作会引起崩溃,ARC也可以避免这个问题。先保留新值,再释放旧值,避免了这个情况。

-(void)setUp{
    id temp = [People new];
    _people = [temp retain];
    [temp release];
}

ARC如何清理变量
回收object-c++对象时,待回收的对象会调用所有C++对象的析构函数(destructor),编译器发现C++对象,就会生成.cxx_destruct方法,ARC就借助此特性来清理内存。
对于CoreFoundation对象,则需要手动 CFRelease()、CFRetain()
对于malloc()生成的对象,手动free()

一般会生成一个对应的close方法,封装release操作

  • 技巧二十三:在dealloc方法中要做的事

释放指向其他对象的引用,取消kvo,通知。不要再做其他事
不要在dealloc中执行方法,特别是异步方法,因为对象已随时被销毁

  • 技巧二十四: 自动释放池的使用

自动释放池排布在栈中, 对象收到autorelease消息后,系统将其放置到最顶端的池子里,自动释放池也有收纳对象的作用
自动释放池降低内存峰值
@autoreleasepool可以创建出轻量级的自动释放池

  • 技巧二十五:不要使用retainCount

[people retainCount]不会考虑到后面自动缓存池的释放情况
系统可能进行释放优化,在引用计数为1的时候就释放对象
NSString和部分NSNumber(不包括浮点型),系统都设计为单例,通过标签指针管理,引用计数为2的63、64次方左右

相关文章

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

  • Effective Objective-C 2.0笔记(四)

    第五章 内存管理 第29条:理解引用计数 OC使用引用计数管理内存,引用计数机制通过递增递减的计数器来管理内存。对...

  • Effective Objective-C 2.0 读书笔记五

    第五章 内存管理 内存管理对一门语言来说异常的重要,掌握一门语言的内存管理是很必要的。 29. 理解引用计数 OC...

  • Effective Objective-C 2.0 读书笔记 (

    第五章 内存管理 第29条 理解引用计数 虽然现在Objective-C的内存管理方式是ARC(自动引用计数),但...

  • Effective Objective-C 2.0(读书笔记)五

    第五章 内存管理 二十九:理解引用计数 要点: 引用计数机制通过可以递增递减的计数器来管理内存。对象创建好之后...

  • 2018-04-24

    第五章:内存管理 29. 什么是ARC:对象被引用的次数。 30. ARC 下可以用“静态分析器”查找内存泄漏问题...

  • 第五章 内存管理

    第二十九条:理解引用计数要点:1.引用计数机制通过可以递增递减的计数器来管理内存.对象创建好之后,其保留计数至少为...

  • 第五章 内存管理

    29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...

  • 第五章:内存管理

    对象的强引用原理: ARC除了在编译期自动添加retain、release、autorelease,还做了以下优化...

  • 第五章 内存管理

    总结 1、理解引用计数 1、工作原理:在引用计数架构下,对象有个计数器,用以表示当前有多少个事物想令此对象继续存活...

网友评论

      本文标题:第五章:内存管理

      本文链接:https://www.haomeiwen.com/subject/onswuttx.html