内存管理
一、谁调用(alloc、new、retain、copy),谁释放。
1、alloc
void test(Student *stu){
Book *book = [[Book alloc] iniWithPrice:3.5];
stu.book = book;
[book release];
}
2、retain,在Student类的setter中retain了book对象,则需要在Student的dealloc方法中释放book.
- (void)setBook:(Book *)book {
_book = [book retain];
}
- (void)dealloc {
[_book release];
NSLog(@"student:%i 被销毁了",_age);
[super dealloc];
二、retain新传对象前,先release之前传的对象。
- (void)setBook:(Book *)book {
//先判断传进来的对象与当前对象是否相同,如果不同才relaese.
if(_book != book){
//释放之前的成员变量,再retain新传进来的对象。
[_book release];
_book = [book retain];
}
}
三、野指针指调用已经被释放过的内存,没有指向任何东西的指针叫空指针,野指针会报错,空指针不会。
四、@property (retain) , 这里的retain代表:在set方法中,release旧值,retain新值。不需要再手动写setter方法。
浙公网安备 33010602011771号