您的位置:首页 > 其它

OC基础—内存管理之多对象内存管理

2014-04-26 10:33 197 查看
------ android培训java培训、期待与您交流! ----------

                 多对象内存管理

1. 多个对象之间的内存管理遵循的原则:

* 你想使用某个对象,就应该让对象的计数器+1 retain一次

* 你不想在使用某个对象,就应该让对象的计数器-1 release一次

* 谁retain,谁release

* 谁alloc, 谁release

2. 举一个例子:

下面会的Person类包含了Book类(组合),要求只要有Person需要Book那么Book就不会被回收。

           **********************main函数**********************

#import <Foundation/Foundation.h>
#import "Book.h"
#import "Person.h"

int main( )
{
Book *b = [[Book alloc] init];
b.price = 30;

Person *p = [[Person alloc] init];
// p用这本书
p.book = b; // 这里是有个新对象_book产生

[b release]; // 上面的b不想用了
b = nil; // 把变量b清空

[p release]; // person 的计数器为0  p调用alloc方法 book被回收
p = nil;
// b.release;

return 0;
}


    

**********************Book类************************

#import <Foundation/Foundation.h>

@interface Book : NSObject

{
int _price;

}

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

@end

#import "
a329
Book.h"

@implementation Book

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

- (void)dealloc
{
NSLog(@"book对象被回收");
[super dealloc];
}

@end


*****************************Person类*************************

#import <Foundation/Foundation.h>
#import "Book.h"

@interface Person : NSObject
{
Book *_book;
}

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

@end

#import "Person.h"

@implementation Person

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

- (void)dealloc
{
[_book release]; // 这里是一个注意点
NSLog(@"person对象被回收");
[super dealloc];
}

@end

这里 [_book release]; 就是遵守内存管理的原则:你不想在使用某个对象,就应该让对象的计数器-1 release一次。

------ android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: