2011-06-24 9 views
0

基本的には、私のクラスを通してUIApplicationデリゲートのwindowプロパティにアクセスできるようにしたいので、iVarを使ってそれを参照したいと思います。ここに@propertyが必要ですか?

この目的のために、私はそれを "所有"したくないです。単にそれを参照してください。

したがって、可変参照を.hファイルに入れるだけですか?

#import <UIKit/UIKit.h> 


@interface MessageView : UIView { 
    UILabel *messageLabel; 
    UIWindow *window; 
} 

@property (nonatomic, retain) UILabel *messageLabel; 

@end 

また、プロパティを設定する必要はありますか?

プロパティはnonatomic, retainであると私は懐疑的ですが、私が実際にやっていない限り、私はそれを保持したくありません。 :p

ウィンドウオブジェクトを持つ目的は、現在のビューコントローラのビューではなく、サブビューを追加することだけです。

おかげ

答えて

1

あなたのアプリの生涯にわたってが存在すると、アプリデリゲートによって既に保持されているため、それを保持する必要はありません。このシナリオでは、最初の場所での特性を有する

someclass.window = self.window; // Using a property 

がはるかに簡潔実際

window = [UIApplication sharedApplication].window; // Using an iVar 
+0

多くのお客様に感謝します。 :)それを割り当てる。それは私があなたが見ていると思ったものです。私はそれを所有する必要はなく、すでに所有しています。 :) –

0

さて、あなたが実際に UIWindowを保持したいです。デフォルトでは新しいプロジェクトがそれを保持しており、それには何も問題はありません。 MessageViewUIViewから直接継承していて、それが一度ウィンドウ(またはウィンドウのサブビュー)に追加されると設定されるウィンドウプロパティがあることがわかります。 willMoveToWindow:didMoveToWindowもご覧ください。今は、assignキーワードのために何かを保持したくないという理由だけで、プロパティを作成できないとは決して考えません。そして、あなたがそれを保持していない

@property (nonatomic, assign) UIWindow *window 

を使用しないのはなぜ

#import <UIKit/UIKit.h> 


@interface MessageView : UIView { 
    UILabel *messageLabel; 
    UIWindow *window; 
} 

@property (nonatomic, retain) UILabel *messageLabel; 
@property (nonatomic, assign) UIWindow *window; 

@end 
0

より糖衣構文以外の何ものでもありません、いいえ、あなたはしないでください。

として、(あなたはおそらくあなたのAppDelegateの内側にやっているよう)あなたがUIWindowMake Key Windowのいずれかの方法を使用するたびに - makeKeyAndVisible
- makeKeyWindow

ウィンドウのすべてから利用可能になりますあなたのアプリケーションはUIApplication'skeyWindowのプロパティを使用するだけです。

[[UIApplication sharedApplication] keyWindow] 

ので、プロパティのための必要はありませんか、それはあなたのアプリケーションクラスによって保持されるように、A、どこか他のあなたのAppDelegateに保持しますか。

OBS:XCodeのアプリケーションテンプレートは、インターフェイスビルダーとIBOutletを使用してUIWindowをインスタンス化するため、このプロパティは通常AppDelegateに配置されます。あなたが手作業であなたのウィンドウを作成しているなら、そこにはプロパティは必要ありません。

関連する問題