关闭

OC内存管理-02

标签: ios内存管理
240人阅读 评论(0) 收藏 举报
分类:

假设我们有一个人的类Person和类Book,类的具体实例变量和方法如下 

(1) Person.h

#import <Foundation/Foundation.h>

#import "Book.h"

@interface Person : NSObject

{

//Person类中有书

    Book *_book;

}

-(void)setBook:(Book *)book;

-(Book *)book;

@end

 

(2)Person.m

#import "Person.h"

/*

1) 当我们使用(占用)对象时,就对传进来的对象进行retain操作,且retain方法返回的时对象本身,所以实现代码:

_book =[book retain];

2) 当我们不使用(占用)对象时,我们应该在本身dealloc方法里对占用的对象执行一次release操作。实现语句:

[_book release]

*/

@implementation Person

-(void)setBook:(Book *)book{

 //当我们引用书对象的时候我们应该对于书book对象的计数器

//进行retain操作

    _book =[book retain];

}

-(Book *)book{

    return _book;

}

-(void)dealloc{

//不使用_book对象,需要对执行release操作

    [_book release];

NSLog(@"Person 对象被回收");

/*值得注意的时写某个类的dealloc方法时

一定要写[super dealloc],并且放在最后面

*/    

[super dealloc];

}

(3)Book.h

#import <Foundation/Foundation.h>

 

@interface Book : NSObject

 

@end

 

(4)Book.m

#import "Book.h"

 

@implementation Book

-(void)dealloc{

    NSLog(@"书对象被回收");

    [super dealloc];

}

@end

(5)main.m

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[]) {

    //创建一个人,有alloc 则就执行一次[p release]

    //p-1

    Person * p = [[Person allocinit ];

    //创建一本书,有alloc 则就执行一次[b release]

    // b1-1

    Book * b1 = [[Book allocinit];

    //计数器加1 p-1  b1-2

    p.book = b1;

    [p release];

    [b1 release];

 

    int  a;

   

      return 0;

}

 

 

总结:(1)谁retain,谁release

2)谁alloc ,谁release

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36239次
    • 积分:851
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:0篇
    • 译文:1篇
    • 评论:10条
    最新评论