Objective-Cのメモリ管理におけるオーナーシップの移行の仕組みについて

2009/08/20 at 08:00 コメントをどうぞ


Object-Cのメモリ管理と関連して以下のような単語で始まるメソッドを使ってオブジェクトのインスタンスを取得した場合はそのインスタンスのオーナなり、メモリ解除の責任を担うこととなります。

– alloc

– copy…

– new…

まあ、そのようなルールならそれを覚えていればいいだけの話ですが、これはどうやって実現されているか考えてみました。その原理は簡単!ですね。以下に説明します。

(※ただ、俺流の理解なので間違い等があったら突っ込んでください。)

要は、あるオブジェクトがメソッドの中で-allocによってインスタンスを生成し、メモリを割当した場合、reference countは1になる訳ですが、それをメソッドの戻り値として返す時にautoreleaseをしているかどうかの差ですね。

autoreleaseを呼んでいるのなら、いづれそのインスタンスのreference countは一つ減る筈なのでメソッドを呼び出した方はそのカウントについて気にしなくていいです。が、autoreleaseを呼ばずにメソッドの呼び元にインスタンスを返した時はreference countが増えたまま。なので、受け取った側でそれを減らす必要があります。そのような状況を持って「オーナーシップの移行」なんてカッコ良く呼んでいるだけですね。

でも、こんな大事なことが言語の仕様ではなくただのネーミングルールで守られることを望まれているとは!

Objective-Cには今でも驚かされるばかりです。

広告

Entry filed under: Objective-C is ....

Interface Builder使用においてのチップ Objective-Cのメモリリークを確認しよう! LLVM/Clang Static Analyzer

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

Trackback this post  |  Subscribe to the comments via RSS Feed


カレンダー

2009年8月
« 5月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Most Recent Posts


%d人のブロガーが「いいね」をつけました。