OC-EX35ARC基本原理

OC-EX35ARC基本原理
 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 

你可能感兴趣的:(OC-EX35ARC基本原理)