基本上我希望能够在我的课程中一直访问UIApplication委托的window
属性,所以我想用iVar来引用它。
为此,我不想“拥有”它,只是引用它。
因此,我应该在.h文件中添加变量引用吗?
#import <UIKit/UIKit.h>
@interface MessageView : UIView {
UILabel *messageLabel;
UIWindow *window;
}
@property (nonatomic, retain) UILabel *messageLabel;
@end
或者我也应该在那里设置属性?
我持怀疑态度,因为该属性将是nonatomic, retain
,但我不想保留它,除非我真的这么做,我只是很厚! :P
拥有窗口对象的目的只是为了能够向它添加子视图,而不是当前视图控制器的视图。
由于
答案 0 :(得分:1)
为什么不使用
@property (nonatomic, assign) UIWindow *window
然后你没有保留它。
鉴于应用程序生命周期中存在应该的窗口,因此不需要保留它,因为它已经被您的应用代表保留。
在这种情况下首先拥有一个属性只不过是语法糖
someclass.window = self.window; // Using a property
比
简洁得多window = [UIApplication sharedApplication].window; // Using an iVar
答案 1 :(得分: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
答案 2 :(得分:0)
实际上,不,你没有。
每当您使用任何UIWindow
Make Key Window方法时(正如您在AppDelegate
中所做的那样),例如
- makeKeyAndVisible
- makeKeyWindow
只需使用UIApplication's
keyWindow属性,即可从所有应用程序中使用该窗口。
[[UIApplication sharedApplication] keyWindow]
因此,您的AppDelegate
或其他任何地方都不需要属性或保留,因为它将由您的应用程序类保留。
OBS:该属性通常放在您的AppDelegate
中,因为来自XCode的应用程序模板使用了界面构建器和IBOutlet来实例化UIWindow
。因此,如果您手动创建窗口,那么就不需要属性。