たとえば、私はRootViewController
クラスとAnotherViewController
クラスを持っていて、私はのプロパティをAnotherViewController
から変更する必要があります。AnotherViewController.h
にそのRootViewControllerプロパティを持つことは安全ですか?変数)?別のUIViewControllerのプロパティとしてUIViewControllerを設定するのは悪い考えですか?
@interface AnotherViewController : UIViewController {
RootViewController *rootViewController;
}
@property (nonatomic, retain) RootViewController *rootViewController;
@end
@implementation AnotherViewController
@synthesize rootViewController;
- (void)someMethod {
// set the data was added flag, so the rootViewController knows to scroll to the bottom of the tableView to show the new data
self.rootViewController.dataWasAdded = YES;
// if the user came in via a search result, make the search controller's tableView go away
self.rootViewController.searchDisplayController.active = NO;
}
これは良い考えではない場合は、誰でも理由を説明できますか?
上記のコードでは、私はプロトコル/デリゲートを使って同じことを処理できたと思います。しかし、私が読んだ本やその他の資料は、実際にこれについて議論していません。
私は、自分のアプリを普遍的なものにするプロセスを進めており、UISplitViewController
を使用していることがわかりました。ユーザが頻繁に「マスタービュー」を更新する必要があることがわかりました。 "詳細ビュー"。だから、簡単なルートのように見えて、プロパティとしてUIViewControllers
を設定し始めましたが、メモリリークや時折クラッシュを追跡するのが難しいです。私は "循環参照"について何かを読んで、それが問題の一部であるかどうか疑問に思います(私はUIViewControllers
が互いの特性として設定されているいくつかの場所を持っています)。
ありがとうございましたか、またはこれをカバーする参考資料へのポインタをありがとうございます。
+1よく言われています。親コントローラが子ビューコントローラへの参照を保持しても問題ありません。親は通常、子をインスタンス化する必要があるため、すでにそこに依存関係があります。しかし、他の方向への依存を避けることができれば、子コントローラはより自蔵的で、再利用可能であり、テストが容易です。 – Caleb
応答をありがとう。私のコードのいくつかを再構成する必要があるように思えます。私は私の子ビューコントローラの4つで少なくとも17のさまざまなメソッドで親ビューコントローラにアクセスしているので、いくつかの作業が必要ですが、うまくいけばそれは説明できないメモリリークをクリアする(または追跡するのを助ける)でしょう。そうすることで、インタフェースヘッダファイル(@classは動作しませんでした)に入れなければならない#importディレクティブのいくつかを取り除き、潜在的な循環依存関係を取り除くことができます。 –