Learn iPhone, iOS, Objective-c, Swift, cocos2dx, Unity and ….?

iOSやAndroid開発でのエラー解決法や便利tipsのメモ

RSS Feed

Objective-C – IBOutletオブジェクトの所有修飾子は何にすべき? –

0 Comments
Posted by Kuro on 2013/02/28

スポンサードリンク

Interface Builderで作ったオブジェクト(IBOutlet修飾子をつけてproperty宣言したオブジェクト)の所有修飾子は何を指定するのが正しいのでしょうか。

retainそれともassign(ARC使用の場合はstrong or weak/unsafe_unretained)?

ソースコードによって違っていて気になったので調べてみました。

結論から言うと、非ARC環境ではretain、ARC環境ではweakが推奨のようです。
(少なくともそのオブジェクトをparent viewにaddsubviewするようなノマールな使い方のときは)

最大の根拠はNew Referencing Outletをdragで作成するときのデフォルトがそうなっていることです。

非ARC環境のデフォルト

iboutlet-property-retain

ARC環境のデフォルト

iboutlet-property-weak

詳解 Objective-C 2.0による説明

詳解 Objective-C 2.0には以下のような記述がありました。

ARCを使って開発を行う場合、オブジェクト間に保持の循環ができないように留意しなければなりません。このため、主要なオブジェクトの結合以外は、弱い参照で結びつけることが推奨されています。宣言プロパティの場合は、assignまたはweakを指定することになります。(p198)

unsafe_unretainedの使いどころ

weak修飾子が使えるようになったiOS5以降にあえてunsafe_unretainedを使う場面があるのかということが気になります。
調べてみるとweakが使用できないクラスがあったり、一応必要な場面はあるようです。
いくつかの特殊な場合を除いてweakを使えばよさそうです。

その他の理由については以下のサイトで詳しく解説されています。
http://cocoadays-info.blogspot.jp/2011/11/outlet-weak.html
http://kakko-no-ireko.blogspot.jp/2012/03/iosarcweak.html

スポンサードリンク


You can leave a comment, or trackback from your own site.

0 Comments

You can be the first to comment!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサードリンク

Popular Posts