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のように考えてはいけない!
TrackBack URL :
Comments (0)
コメントはまだありません»
コメントはまだありません。
この投稿へのコメントの RSS フィード。TrackBack URL
コメントする