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

第五章 内存管理

作者: 写下岁月的痕迹 | 来源:发表于2019-01-10 17:35 被阅读0次

总结

1、理解引用计数

1、工作原理:在引用计数架构下,对象有个计数器,用以表示当前有多少个事物想令此对象继续存活下去。这在Objective-C中叫做“保留计数”,即引用计数(retain count)。
(1)、alloc、new、retain、copy、mutableCopy:retain count 递增(+1);
(2)、release、autorelease:retain count 递减(-1);

2、以ARC简化引用计数

ARC只负责管理Objective-C对象的内存。尤其注意:CoreFoundation对象不归ARC管理,开发者必须适时调用CFRetain/CFRelease。

3、在dealloc方法中只释放引用并解除监听

1、在dealloc 方法里,应该释放指向其他对象的引用,并取消订阅的KVO或通知,不要做其他的事情。
2、如果对象持有文件描述符等系统资源,那么应该专门编写一个方法来释放此种资源。这样的类要和其使用者约定:用完资源后必须调用close方法。

- (void)close {
    /*clean up resource*/
    _closed = YES;
}
- (void)dealloc {
    if (!_closed ) {
        NSLog(@"ERROR: close was not called before dealloc!");
        [self close];
    }
}

3、执行异步任务的方法不应在dealloc里调用,只能在正常状态下执行的那么方法也不应在dealloc里调用,因为此时对象已处于正在回收的状态了。

4、以弱引用避免保留环

1、弱引用:可以使用unsafe_unretained、weak 修饰,两者的区别如下图:


WechatIMG155.jpeg

当指向EOCClassA实例的引用移除后,unsafe_unretained属性仍然指向那个已经回收的实例,而weak属性则指向nil。

5、以“自动释放池块”降低内存峰值

1、创建自动释放池:

@autoreleasepool {
    //......
}

使用情景:当循环长度无法预知,需要使用到“自动释放池块”来降低内存峰值。如:

NSArray *dataSource = /*....*/;
NSMutableArray *people = [NSMutableArray new];
for (NSDictionary *record in dataSource) {
    @autoreleasepool {
         EOCPerson *person = [[EOCPerson alloc] initWithRecord:record];
         [people addObject:person];
    }
}

相关文章

  • 《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/tfdwrqtx.html