ページ

2012年4月25日水曜日

mac:Objective-C メモリ管理の重要さというか面倒臭さ

今、仕事で作成しているPGが LEOPARD以上向けなので、ARCが使えない。
なので、release / retain / autorelease を駆使して、メモリ管理をしなくてはならない。

しかし、これがまた面倒だ。

なんとなく覚えた(知った)メモリ管理の作法としては・・・

・自分で alloc init (copyも)したオブジェクトは「必ず」自分で release する。
・自分で retain したオブジェクトは「必ず」release する。
・オブジェクトの入れ替え時には、過去のものは「必ず」release する。
(release してから オブジェクトの生成。いきなりオブジェクトを生成しない)
・それ以外は release しない。
・コンビニエンスコンストラクタで作成された使い回しする予定のオブジェクトは、retain しないと、後々開放されてしまう。

java はその点簡単で良かった。
その分、メモリを大量に消費してしまうが。

2012年4月21日土曜日

mac : Objective-C のクラス(1)

当分の間、仕事のためにObjective-Cの勉強をしなければならない。
まぁ、敵を知り己を知ればなんとやら・・・と言うことで、頑張っていこう。

で、クラスの作成時の基礎的なもの。
・クラスのテンプレートとして、初期化、終了処理は以下のようにする。

#import "TemplateClass.h"

@implementation TemplateClass
- (id) init
{
    self = [super init];
    if (self != nil) {
        // ここに初期化処理を記述する
    }
    return self;
}

- (void) dealloc
{
    // ここにreleaseするobjectや、終了処理を記述する
    [super dealloc];
}
@end

ただしARCが有効な場合は、deallocの記述中でreleaseやsuper deallocをしてはならない。
(xcode に怒られる)