0

基本的には、クラス全体で UIApplication デリゲートのwindowプロパティにアクセスできるようにしたいので、iVar で参照したいと考えています。

この目的のために、私はそれを「所有」したくありません。参照するだけです。

したがって、変数参照を .h ファイルに入れるだけでよいのでしょうか?

#import <UIKit/UIKit.h>


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

@property (nonatomic, retain) UILabel *messageLabel;

@end

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

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

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

ありがとう

4

3 に答える 3

1

使わない理由

@property (nonatomic, assign) UIWindow *window

それからあなたはそれを保持していません。

ウィンドウアプリの存続期間中存在する必要があるため、アプリのデリゲートによって既に保持されているため、ウィンドウを保持する必要はありません。

このシナリオで最初にプロパティを持つことは、構文糖にすぎません

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

よりもはるかに簡潔です

window = [UIApplication sharedApplication].window; // Using an iVar
于 2011-06-24T12:48:47.393 に答える
0

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

#import <UIKit/UIKit.h>


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

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

@end
于 2011-06-24T12:45:35.823 に答える
0

実際、いいえ、あなたはしません。

UIWindow Make Key Windowメソッドのいずれかを使用するときはいつでも(おそらく 内で行っているようにAppDelegate)、次のようになります。

– makeKeyAndVisible
– makeKeyWindow

UIApplication's keyWindowプロパティを使用するだけで、すべてのアプリケーションからウィンドウを使用できるようになります。

[[UIApplication sharedApplication] keyWindow]

AppDelegateそのため、アプリケーション クラスによって保持されるため、プロパティや保持は必要ありません。

OBS: AppDelegateXCode のアプリケーション テンプレートがインターフェイス ビルダーと IBOutlet を使用してUIWindow. そのため、手動でウィンドウを作成している場合、そこにプロパティは必要ありません。

于 2011-06-24T13:01:16.463 に答える