OC MRC之多对象之间管理(代码分析)

  1 #import <Foundation/Foundation.h>
  2 
  3 @interface Book : NSObject
  4 {
  5     int _price;
  6 }
  7 
  8 - (void)setPrice:(int)price;
  9 - (int)price;
 10 
 11 @end
 12 
 13 #import "Book.h"
 14 
 15 @implementation Book
 16 
 17 - (void)setPrice:(int)price
 18 {
 19     _price = price;
 20 }
 21 
 22 - (int)price
 23 {
 24     return _price;
 25 }
 26 - (void)dealloc
 27 {
 28     NSLog(@"Book对象被回收");
 29     [super dealloc];
 30 }
 31 @end
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 #import <Foundation/Foundation.h>
 41 #import "Book.h"
 42 
 43 @interface Person : NSObject
 44 {
 45     Book *_book;
 46 }
 47 
 48 - (void)setBook:(Book *)book;
 49 - (Book *)book;
 50 
 51 @end
 52 
 53 #import "Person.h"
 54 
 55 @implementation Person
 56 - (void)setBook:(Book *)book
 57 {
 58     _book = [book retain];
 59 }
 60 
 61 - (Book *)book
 62 {
 63     return _book;
 64 }
 65 
 66 - (void)dealloc
 67 {
 68     [_book release];
 69     NSLog(@"Person对象被回收");
 70     [super dealloc];
 71 }
 72 @end
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 /*
 81  1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 82  2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)
 83  
 84  3.谁retain,谁release
 85  
 86  4.谁alloc,谁release
 87  */
 88 
 89 #import <Foundation/Foundation.h>
 90 #import "Person.h"
 91 #import "Book.h"
 92 
 93 int main()
 94 {
 95     // b-1
 96     Book *b = [[Book alloc] init];
 97     // p-1
 98     Person *p1 = [[Person alloc] init];
 99     
100     //p1想占用b这本书
101     // b-2
102     [p1 setBook:b];
103     
104     // p-0
105     // b-1
106     [p1 release];
107     p1 = nil;
108     
109     // b-0
110     [b release];
111     b = nil;
112     return 0;
113 }
原文地址:https://www.cnblogs.com/oc-bowen/p/5053704.html