黑马程序员_多对象的内存管理
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 <Foundation/Foundation.h>
/****************** 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;
}