黑马程序员技术交流社区

标题: autorelease [打印本页]

作者: Storm_    时间: 2015-11-7 19:13
标题: autorelease
        是一种支持引用计数的内存管理方式 它可以暂时的保存某个对象,然后在内存池自己的排(drain)的时候对其中的每个 对象发送release消息 注意,这里只是发送release消息,如果当时的引用计数(reference-counted)依然不为0,则该 对象依然不会被释放。可以用该方法来保存某个对象,也要注意保存之后要释放该对象。

好处:
(1)不需要再关心对象释放的时间
(2)不需要再关心什么时候调用release


使用注意:

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1   、  自动释放池
        //autourelease的使用注意:
        //1)并不是所有的放入自动释放池的代码,产生的对象就会自动释放,如果需要释放,必须加入到自动释放池
        //2)如果调用了autourelease但是,调用时没有在任何自动释放池
        //则不能释放
        Person *p=[[Person new] autorelease];
    }
    return 0;
}

2、//不管再自动释放池内、还是外部创建爱
Person *p = [Person new];
[p retain];
//自动释放池的嵌套
@autoreleasepool {
@autoreleasepool {
[p autorelease];
//此时p被加入到自动释放池
}
//再次将p加入到另一个自动释放池
[p autorelease];
}
3、自动释放池中不适宜放占用内存比较大的对象

1)尽量避免对大内存使用该方法,对于这种延迟释放机制,还是尽量少用
2)不要把大量循环操作放到同一个 @autoreleasepool 之间,这样会造成内存峰值的上升



ps:

id和instancetype

        instancetype可以智能帮我们判断赋值的指针变量的类型和方法的返回值是否一致
作者: Morning_jcg    时间: 2015-11-7 21:55
学习学习,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2