@blog.justoneplanet.info

日々勉強

Objective-Cのメモリ管理

iOSではガーベジコレクションが使用できないらしいので、メモリ管理をしなくちゃならん。JS、PHP、Java、Pythonを使ってきた自分的には煩わしいと思ってしまう部分ではある。

■autorelease

Dog *pochi = [[[Dog alloc] init: @"pochi"] autorelease];

■retainとrelease

内部的には参照カウンタを使用している。カウンタが0になり参照がなくなるとメモリが開放される。

retain

以下のようにretainを使用し、参照カウンタをインクリメントする。

Dog *pochi = [[Dog alloc] init: @"pochi"];
_tmp = [pochi retain];

release

以下のようにreleaseを使用し、参照カウンタをデクリメントする。

-(void)dealloc{
    [pochi release];
    [super dealloc];
}

■文字列について

@””で生成した文字列については、retainやreleaseは必要としない。

メモリリークについて

アプリケーションの終了時、deallocは処理されずに全てのメモリが開放される。但し、マルチタスク端末ではバックグラウンドにメモリが足りなくなるまで残る。

実態は1つ。そこに紐づく変数ができたらretain。紐づく変数を使い終わったらrelease。そんな感じ。autoreleaseをGCのように考えてはいけない!

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment