OCオブジェクトのメモリ管理

1006 ワード

一.原理
     NSObjectを継承したオブジェクトには、参照カウンタと呼ばれる関連する整形変数があります.カウンタの値が0の場合のみ、OCはそのオブジェクトを回収します.そうしないと、回収されません.
     1.オブジェクトの作成時にalloc,new,copyを使用する場合、参照カウンタの値は1
     2.releaseメソッドを使用してリリースする場合、カウンタの値は1減少する
     3.retainメソッドを使用する場合、カウンタの値に1を加算
     4.オブジェクトが回収されると、オブジェクトのdeallocメソッドが自動的に呼び出され、
     5.retainCountメソッドを使用して参照カウンタの値を取得
二.メモリ漏洩防止基準例の書き方:
@class Book;
@interface Student : NSObject
@property Book *book;
@end
#include "Book.h"
@implementation Student
//            
- (void)setBook:(Book *)book{
    if(_book!=book){
        [_book release];
        _book = [book retain];
    }
}
- (Book *)book{
    return _book;
}
- (void)dealloc{
    [_book release];//  _book  
    [super dealloc];
}
@end

以上のメモリ漏洩の処理は、@propertyパラメータretainキーワードで直接以下のように簡単に書くことができます.
@class Book;
@interface Student : NSObject
@property (retain) Book *book;//OC  set        
@end