OC内存管理-02

假设我们有一个人的类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

阅读更多
文章标签: ios 内存管理
个人分类: OC总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭