黑马程序员_多对象的内存管理



黑马程序员_多对象的内存管理

1.原理

* 只要你想用这个对象,就让对象的计数器+1

* 当你不再使用这个对象时,就让对象的计数器-1

2.谁创建,谁release

* 如果你通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或autorelease

* 换句话说,不是你创建的,就不用你去[auto]release

3.谁retain,谁release

* 只要你调用了retain,无论这个对象是如何生成的,你都要调用release

4.总结

* 有始有终,有加就有减

* 曾经让对象的计数器+1,就必须在最后让对象的计数器-1

代码示例:


/*
 * 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 *
 * 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release操作)
 *
 * 3.谁retain,谁release
 *
 * 4.谁alloc,谁release
 */
#import 

/****************** Book ******************/
@interface Book : NSObject
{
	int _price;
}

- (void)setPrice:(int)price;
- (int)price;

@end

@implementation Book

- (void)setPeice:(int)price
{
	_price = price;
}

- (int)price
{
	return _price;
}

- (void)dealloc
{
	NSLog (@"Book --- -dealloc");
	[super dealloc];
}

@end

/****************** Person ******************/
@interface Person : NSObject
{
	Book *_book;
}

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

@end

@implementation Person

- (void)setBook:(Book *)book
{
	_book = [book retain];
}

- (Book *)book
{
	return _book;
}

- (void)dealloc
{
	[_book release];

	NSLog (@"Person --- -dealloc");
	[super dealloc];
}

@end

int main()
{
	// b的计数器是1
	Book *b = [[Book alloc] init];

	// p1的计数器是1
	Person *p1 = [[Person alloc] init];

	// p1想占用b这本书
	// b的计数器是2
	[p1 setBook:b];

	// p1的计数器是0
	// b的计数器是1
	[p1 release];
	p1 = nil;

	// b的计数器是0
	[b relese];
	b = nil;

	return 0;
}

你可能感兴趣的:(ios平台,ios开发,library,objective-c,开发者)