------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
@autorelease
/*
1. autorelease的基本用法
1> 会将对象放到一个自动释放池中
2> 当自动释放池被销毁时,会对池子里面的所有的对象做一次release操作
3> 会返回对象本身
4> 调用完autorelease方法后,对象的计数器不变
2.autorelease的好处
1>不用再关心对象释放的时间
2>不用再关心声明时候调用release
3.autorelease的使用注意
1>占用内存比较大得对象不要随意使用autorelease
2>占用内存比较小得对象使用autorelease,没有太大影响
4.错误写法
1>alloc之后调用了autorelease之后又调用了release
@autoreleasepool
{
// 1
Person *p = [[[Person alloc] init] autorelease];
// 0
[p release];
}
2>连续调用多次autorelease
@autoreleasepool
{
Person *p = [[[[Person alloc] init] autorelease] autorelease];
}
5.自动释放池
1> 在ios程序运行过程中,会创建无数多个池子,这些池子都使以栈
结构存在(先进后出)
2> 当一个对象调用autorelease方法时,会将这个对象放到栈顶得释放池中
6.自动释放池中的创建方式
@autoreleasepool
{
}
*/
// autorelease应用
/*
1. 系统自带的方法里面没有包含alloc,new,copy,说明返回的对象都是
autorelease的
2. 开发中经常会提供一些类方法,快速创建一个已经autorelease过的
对象
1>创建对象是不要直接用类名,一般用self
+ (id)person
{
return [[[self alloc] init] autorelease];
}
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[[Person alloc] init] autorelease];
p.age = 10;
@autoreleasepool {
Person *p2 = [[[Person alloc] init] autorelease];
p2.age = 20;
}
Person *p3 = [[[Person alloc] init] autorelease];
}
return 0;
}