温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Objective-C(8)内存管理之自动释放池

发布时间:2020-07-09 12:32:04 来源:网络 阅读:546 作者:ymanmeng123 栏目:移动开发
  • 自动释放池

是一种半自动的内存管理方式

autorealease方法:

- (instancetype)autorelease

     此方法将对象放到自动释放池中,当自动释放池销毁时,池中的所有对象都会随之销毁。

     常见的使用方式:

Person *p = [[[Perosn alloc] init] autorelease];

使用@autoreleasepool关键字来使用自动释放池

     其后的{…}相当于自动释放池的生存期 ,如:

@autoreleasepool {
     Person *p = [[[Perosn alloc] init] autorelease];
     …
}

好处:不用关心对象释放的时间、不用关心什么时候调用release


注意:

1)占用内存较大的对象尽量不要随意使用autorelease

2) @autoreleasepool可以嵌套

     系统中有一个自动释放池的栈结构,autorelease方法是将对象放入到栈顶得池子中

3)不要多次调用autorelease,如: 

[[[[Person alloc] init] autorelease] autorelease];

4)自动释放池销毁时会对池子中的对象release一次,也就是说autorelease方法并没有更改引用计数。

将autorelease方法封装在类对象方法中是一个比较好的做法

+ (AMPerson*) person    {
    //return [[[Person alloc] init] autorelease];
    return [[[self alloc] init] autorelease];
}


旧版本的自动释放池的使用:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 …
[pool release];

自Xcode5之后基本都是使用autorelease


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI