本文共 967 字,大约阅读时间需要 3 分钟。
对象存入到自动释放池中,当这个池子被销毁的时候,他都会对池子中的所有的对象进行一次release操作
1:怎么把对象存到池子中
//自动释放池,大括号代表池子的作用域,可以自己随意创建
//只有在自动释放池的作用域中调用对象的autorelease方法才能够正确地将对象放入到池子中
@autoreleasepool{
Person *p = [Person alloc]init]; //不管这个对象是在autorelease之内创建的,还是在之外创建的,只要你在池子中调 用了autorelease方法,这个对象就会被放入到池子中
[p autorelease];//autorelease的方法的作用只是将对象放入到池子中,然后返回一个self,并不会使retainCount-1。 autorelease的方法必须在池子中,一个对象只能加入一次。
对象加入到哪个autoreleasepoll,就在哪个autoreleasepool结束后retainCount-1
}//代表池子将要被销毁,对池子中的所有的对象进行一次release操作
2:autorelease应用
》1:如果在方法中创建一个对象,最好初始化为nil,防止出现野指针错误,如
-(Food *)chiefMakeFood
{
//1
Food *food = nil;//可写成 Food *food = [Food alloc]init];
//0
//[food release];//会发生野指针错误
[food autorelease];//
return food;
}
》2:给外界提供一个快速获得当前对象 的快捷方法,是类方法
+(Chief *)chief
{
Chief *chi = [[self alloc]init]; //self:谁调用就指向谁
[ chi autorelease];
return chi;
}
在 @autoreleasepool{
Chief *chi = [Chief chief];
Food *food = [chi chiefMakeFood];
}
NSString *name = [NSString stringWithFormat:"%@",@"啦啦啦"];//都是autorelease
转载地址:http://pxrvb.baihongyu.com/