2012-05-07 8 views
8
#import <UIKit/UIKit.h> 
#import "UCMapviewController.h" 
#import "UCMenuviewController.h" 
#import "UCOverviewController.h" 

@interface UCRootViewController : UIViewController 

@property (weak, nonatomic) UCMapviewController *mapviewController; 
@property (weak, nonatomic) UCMenuviewController *menuviewController; 
@property (weak, nonatomic) UCOverviewController *overviewController; 

これは、これらのサブビューコントローラを管理するUCRootViewControllerの宣言です。彼は後に、1つのコントローラを表示するかどうかを決定する際に、その代理人になります。サブViewControllerの弱いまたは強いプロパティ

rootViewControllerはUIAppDelegateで強力に保持され、常にアクティブのままです。

サブビューコントローラーを弱くするのは正しいですか?私は100%確信していませんが、弱いポインタが指し示す強いポインタがないときに、弱いポインタが割り当て解除されることを理解する限り、ルートが強いほど、弱くするのは正しいですよね?

#import <UIKit/UIKit.h> 

@class UCRootViewController; 
@interface UCOverviewController : UIViewController 

@property (weak, nonatomic) UCRootViewController *rootviewController; 

これは私のサブビューコントローラの1つのヘッダーです。彼らは(後の)delegate rootviewControllerへの弱いポインタを持っています。代理メソッドを呼び出すように@class UCRootviewControllerを宣言すれば十分ですか?私はこれも必要ですか?

おかげ

編集:私はちょうどa nice article about ViewControllersを読み、流路:

は、必ず[のUIViewController presentModalViewController:アニメーション:]高品質ビューコントローラコンテナや +を使用するアプリケーションでのView Controllerを表示します。参照コントローラ をどこかのビューコントローラに保持する必要がある場合は、 が実際にキャッシングの目的でもっと長く生かされることを望む場合を除き、弱い参照を使用してください。 の場合は、メモリ不足の状況にも正しく対応してください。

弱い参照を使用していますが、これについてあなたの意見は何ですか?

+2

弱い参照を使用する場合は、自分自身のViewControllerに強力に使用するコンテナを使用します。私の答えで書いたように、たとえばナビゲーションコントローラを使用するときは、弱い参照を使用しても問題ありません。しかし、現在のVCのビューにサブビューとしてビューを追加したためにコントローラを保持したいときには、強力なポインタを使用する必要があります。そうしないと、それらは早期に割り当てが解除されます。 –

+0

大丈夫ありがとうございます – MJB

答えて

9

強いポインタは、あなたのrootViewControllerにのみ関連しています。これは、あなたのrootViewController内の他のviewControllerに自動的に強く指し示すことを意味するものではありません。

他のviewControllerが望ましくない方法で割り当て解除されないように、これらのプロパティをstrongに設定する必要があります。

ナビゲーションスタックにそれらをプッシュすると、ナビゲーションスタックが自動的にそれらを指し示すので、正常に機能します。しかし、あなたのビューをあなたのrootViewControllerのサブビューとして追加しようとするならば、それらのプロパティが強固であることを確認する必要があります。

オブジェクトに強いポインタがない場合、オブジェクトの割り当てが解除されます。あなたの他のviewControllerへの強力なポインタがないので、それらは割り当て解除されます。

+0

強く指摘されているオブジェクトが指していない限り、それは意味すると思いました。 rootviewCが強力な私のappdelegate、それは割り当て解除されませんされ、限り、彼は他の人にそのokを指している限り。私は明らかにそれを誤解した – MJB

2

Strongは、ARCがあなたのためにリリースを管理することを除いて、retainと同じです。 弱点は、親が子を保持している保持サイクル、またはその逆の保持サイクルを避けるためです。

__weakは、参照されたオブジェクトを有効に保たない参照を指定します。弱参照は、オブジェクトへの強い参照がない場合はnilに設定されます。ここで

のリンクです:Weak and strong property setter attributes in Objective-C

あなたの周りにこれらのビューコントローラを維持したいということを考えると、最良のオプションは、強い参照があります!あなたがそれらを必要とする前にリリースされていないことを確認してください!

関連する問題