A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Storm_ 中级黑马   /  2015-11-7 19:13  /  930 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        是一种支持引用计数的内存管理方式 它可以暂时的保存某个对象,然后在内存池自己的排(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可以智能帮我们判断赋值的指针变量的类型和方法的返回值是否一致

1 个回复

倒序浏览
学习学习,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马