假设我们有一个人的类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 alloc] init ];
//创建一本书,有alloc 则就执行一次[b release]
// b1-1
Book * b1 = [[Book alloc] init];
//计数器加1 p-1 b1-2
p.book = b1;
[p release];
[b1 release];
int a;
return 0;
}
总结:(1)谁retain,谁release
(2)谁alloc ,谁release