OC-EX27多对象内存管理

OC-EX27多对象内存管理
多对象内存管理.m
 1  //
 2  //   main.m
 3  //   多对象内存管理
 4  //
 5  //   Created by sixleaves on 15/5/7.
 6  //   Copyright (c) 2015年 itcast. All rights reserved.
 7  //
 8 
 9 #import <Foundation/Foundation.h>
10 #import "Person.h"
11 #import "Book.h"
12 
13  int main( int argc,  const  char * argv[]) {
14     
15      //  p-1
16      Person *p1 = [[Person alloc] init];
17      //  b-1
18      Book *b = [[Book alloc] init];
19     
20      //  b-2
21      [p1 setBook:b];
22      //  b-1
23      [b release];
24     
25      //  p-0
26      [p1 release];
27      return 0;
28 }
29  /*
30      QQ糖的例子:
31      如果你是开房间的人,那么腾讯服务器如何回收房间,这个房间对象通常有一个
32      人数变量。
33      当你创建房间时候,初始值为1。当你离开时候,房间人数减1,变成0、
34      所以房间所占用的内存被回收。
35      当有人进入房间时候,人数加1,当他离开房间时候,人数也减1.
36   
37      引用计数器的原理和其一样。
38   
39      多对象内存管理原则:(先记住、可类比QQ糖例子理解)
40      1.谁创建,谁release
41   如果你通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或者autorelease(
42      就如同QQ糖里面的,是你开的房间,那么初始人数是1,你离开房间,人数必须减1)
43   换句话说不是你创建的,就不用你去[auto]release
44      2.谁retain,谁release。
45   只要你调用了额retain,无论这个对象如何生成,你都要调用release。
46      
47    */
48 

Person.m

 1  //
 2  //   Person.m
 3  //   多对象内存管理
 4  //
 5  //   Created by sixleaves on 15/5/7.
 6  //   Copyright (c) 2015年 itcast. All rights reserved.
 7  //
 8 
 9 #import "Person.h"
10 #import "Book.h"
11 @implementation Person
12 - ( void)setBook:(Book*)book
13 {
14     _book = [book retain];
15 }
16 - (Book *)book
17 {
18      return _book;
19 }
20 
21 - ( void)dealloc
22 {
23      //  b-0
24      [_book release];
25     NSLog(@"Person-dealloc");
26     [super dealloc];
27 }
28 @end
29 

Book.m
 1  //
 2  //   Book.m
 3  //   多对象内存管理
 4  //
 5  //   Created by sixleaves on 15/5/7.
 6  //   Copyright (c) 2015年 itcast. All rights reserved.
 7  //
 8 
 9 #import "Book.h"
10 
11 @implementation Book
12 - ( void)setPrice:( int)price
13 {
14     _price = price;
15 }
16 - ( int)price
17 {
18      return _price;
19 }
20 
21 - ( void)dealloc
22 {
23     
24     NSLog(@"Book-dealloc");
25     [super dealloc];
26 }
27 @end
28 

你可能感兴趣的:(OC-EX27多对象内存管理)