f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
 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 
posted on 2015-05-10 14:30 swp 阅读(104) 评论(0)  编辑 收藏 引用 所属分类: objective-c

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理