[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
質問
ARCを使用してiOS 5専用に開発しています。その際
IBOutlet
を
UIView
s(およびサブクラス)は
strong
または
weak
?
以下の通りです。
@property (nonatomic, weak) IBOutlet UIButton *button;
これをすべて取り除くことができるだろう。
- (void)viewDidUnload
{
// ...
self.button = nil;
// ...
}
このようなことをしても問題はないのでしょうか?テンプレートは
strong
は、'Interface Builder' エディタからヘッダに直接接続したときに自動生成されるプロパティと同じですが、なぜでしょうか?その
UIViewController
はすでに
strong
を参照することで、その
view
で、そのサブビューを保持します。
解決方法は?
現在Appleが推奨するベストプラクティスは、IBOutletsが 強い ただし 弱い は、retainサイクルを回避するために特に必要です。上記のJohannesさんのように、WWDC2015の"Implementing UI Designs in Interface Builder"のセッションで、Appleエンジニアがコメントしていたことでもあります。
そして、最後に指摘したいオプションは、ストレージのタイプで、次のようなものがあります。 は強いか弱いかのどちらかです。一般に、アウトレットは 特に、アウトレットをサブビューに接続する場合や 常にビューに保持されるとは限らない制約を持つ 階層になります。アウトレットを弱くする必要があるのは、次のような場合だけです。 カスタムビューで、ビューの上位にあるものを参照する場合。 一般的には、これは推奨されません。
IBチームのエンジニアにTwitterでこのことを質問したところ、次のことを確認しました。 強い はデフォルトであるべきで、開発者向けドキュメントが更新されていることを確認しました。
https://twitter.com/_danielhall/status/620716996326350848 https://twitter.com/_danielhall/status/620717252216623104
関連
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] iOS7でスタイルUITableViewStyleGroupedを持つUITableViewの上部に余分なパディングがあるのはなぜですか?
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] UILabelで複数行のテキストを表示する
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み】Objective-C ARC: strong vs retainとweak vs assign
-
[解決済み】Objective-Cで宣言された@property属性(非原子、コピー、strong、weak)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
iOS classic error Undefined symbols for architecture XXX:
-
XCode のコンパイル例外を解決する clang: error: linker command failed with exit code 1
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] UITableViewCell、スワイプ時に削除ボタンを表示させる
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] iOSで現在のデバイスの言語を取得するには?