自动释放池autoreleasepool

来源:互联网 发布:12寸windows平板 编辑:程序博客网 时间:2024/05/21 07:53

对象存入到自动释放池中,当这个池子被销毁的时候,他都会对池子中的所有的对象进行一次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

0 0
原创粉丝点击