日々精進

新しく学んだことを書き留めていきます

Objective-Cのメモリ管理

GCのない言語を触るのは初めてなのでメモリ管理について調べてみた。
下記の記事が非常に参考になりました。ありがとうございました。
http://www.zero4racer.com/blog/88


1.retain, releaseを書かない
2.オブジェクト型を生成する場合は必ずプロパティを作る

プロパティの中で参照カウントの増減を管理することで参照カウントの更新忘れを防ぐ。
プロパティはなるべく無名カテゴリを使ってプライベートプロパティにする。
インスタンス変数の末尾にアンダースコアをつけてプロパティと区別する。
initでセッターを使うのは非推奨らしい。理由が理解できなかった。。
3.allocとautoreleaseを必ずセットで書く
自分でallocしない場合、例えば以下のような場合はstringWithFormatの中でallocとautoreleaseされているので不要。
[NSString stringWithFormat:@"Test is %d percent",100]
4.Array, Dictionaryにオブジェクトを渡すときにルール3を適用する
5.メモリを解放したいタイミングでnilを代入する

deallocの中でnilを代入するのは非推奨らしい。理由は値が変更されたことが通知されることがあるから。
viewDidUnloadの中でnilを代入すること。
6.delegateにオブジェクトを渡したら、不要になったタイミングでdelegatenilを代入すること。
delegateのセッターメソッドはassignする。参照カウントを増やさない。
weakプロパティを使えば上記は不要。