OC-EX33autorelease使用注意事项

OC-EX33autorelease使用注意事项
 1  //
 2  //   main.m
 3  //   autorelease.m
 4  //
 5  //   Created by sixleaves on 15/5/9.
 6  //   Copyright (c) 2015年 itcast. All rights reserved.
 7  //
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Person.h"
11 #import "Dog.h"
12  int main( int argc,  const  char * argv[]) {
13     @autoreleasepool {  //  pool1入栈
14          
15           //  p-1
16          Person *p = [[[Person alloc] init] autorelease];
17          //  c-1
18          Dog *c = [[[Dog alloc] init] autorelease];
19         
20          //  p -1 c-2
21          p.dog = c;
22         
23         
24         @autoreleasepool {  //  pool2入栈
25              
26               //  p1-1
27              Person *p1 = [[[Person alloc] init] autorelease];
28              //  c1-1
29              Dog *c1 = [[[Dog alloc] init] autorelease];
30             
31              //  p1 -1 c-2
32              p1.dog = c1;
33             
34             
35         }  //  pool2出栈销毁
36          
37         
38         
39     }  //  pool1出栈销毁。
40      
41      return 0;
42 }
43  /*
44   自动释放池的管理是通过栈这个数据结构进行管理。
45   
46   autorelease的优点:
47   1.不要在关心对象的释放时间。
48   2.不用再关心什么时候用release。
49   
50   autorelease的使用场合(注意点):
51   1.对于占用内存交大的对象,不要使用autorelease,因为不能精确的控制对象释放的时间。
52   2.反之,对于占用内存小的,使用autorelease的影响比较小。
53   
54   autorelease添加到那个池子:
55   1.通过栈的结构,我们可以很容易的理解,autorelease是添加到当前管理池子的栈
56     中栈顶得池子。
57   
58   
59   autorelease的常见错误(本质都是最终会多次调用release):
60   1.连续调用autorelease。
61   2.在自动释放池中有效范围中,同时条用了autorelease与release。
62   
63   
64   // 在啰嗦几句:
65   // 在ios运行中,系统会自动创建很多的池子,所以autorelease作用在
66   // 的池子,是指栈顶的池子。
67   //
68   //
69   
70    */
71 

你可能感兴趣的:(OC-EX33autorelease使用注意事项)