内存管理

一、谁调用(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方法。

posted @ 2014-12-19 11:59  unity_lan  阅读(119)  评论(0)    收藏  举报