f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
 1 //
 2 //  main.m
 3 //  ARC基本原理
 4 //
 5 //  Created by sixleaves on 15/5/12.
 6 //  Copyright (c) 2015年 itcast. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Person.h"
11 #import "Dog.h"
12 void test1();
13 void test2();
14 int main(int argc, const char * argv[]) {
15     
16     //test1();
17     test2();
18     
19     return 0;
20 }
21 
22 void test1() {
23     
24     Person *p = [[Person alloc] init];
25     
26     __weak Person *p2 = p;
27     
28     p = nil; // 在这行运行后,Person就被释放
29     /*
30         因为在27行,我们清空了指针p,就没有强指针指向,Person对象
31         所以,27行一运行结束,Person对象就会被释放。虽然有p2指向Person
32         对象,但是p2是弱指针。淡然如果把__weak去掉,默认是__strong,则
33         运行完27行后,Person对象还不会被释放。
34      */
35     
36     NSLog(@"test1");
37 }
38 
39 void test2() {
40     
41     Person *p = [[Person alloc] init];
42     
43     Dog * d = [[Dog alloc] init];
44     
45     p.dog = d;
46     
47     d = nil; // 这行运行结束后,狗不会被释放,因为p对象中还有个强指针,指向狗对象。
48     
49     NSLog(@"test2");
50     
51     p = nil;
52     
53     NSLog(@"All-dealloc");
54     /*
55         这行执行完后,由于没有强指针指向Person对象
56         所以,Person对象会被释放,并且会销毁掉Person
57         对象中拥有的对象(Dog的指针变量)。所以就没有强指针
58         指向dog,所以Dog对象也会被销毁。
59      */
60     
61 }
62 
63 /*
64  ARC释放对象的判断准则: 只要没有强指针指向对象,就会销毁对象。
65  
66  ARC的特点
67  1> 不允许调用release、retain、retainCount
68  2> 允许重写dealloc,但是允许调用[super dealloc]
69  3> @property参数
70     strong:相当于retain(适用于OC对象)
71     weak:相当于assign(适用于OC对象)
72     assign:适用于非OC对象
73  4> 用strong替换retain
74  
75  指针分2种:
76  1>强指针:默认情况下,所有的指针都是强指针.(默认用__strong修饰)
77  2>弱指针:__weak
78  
79  Tips:如果你想持有对象,那么就用强指针,如果不想持有对象,就用弱只这么。
80  
81  常见错误:
82  __weak Perosn *p = [[Person alloc] init];
83  //这种错误是没有理解ARC释放对象的判断准则。没有强指针指向Person对象,
84  一创建就会被释放。
85  
86  
87  掌握:
88  1.ARC释放对象的判断准则
89  2.ARC的四个特点
90  3.强指针与弱指针的概念
91  4.常见错误
92  */
93 
posted on 2015-05-12 16:47 swp 阅读(208) 评论(0)  编辑 收藏 引用 所属分类: objective-c

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