0

基本上我希望能够window通过我的类一直访问 UIApplication 委托的属性,所以我想用 iVar 引用它。

为此我不想“拥有”它,只是引用它。

因此,我应该在 .h 文件中放置一个变量引用吗?

#import <UIKit/UIKit.h>


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

@property (nonatomic, retain) UILabel *messageLabel;

@end

或者我也应该在那里设置属性?

我持怀疑态度,因为该财产会是nonatomic, retain,但我不想保留它,除非我真的这样做并且我只是很厚!:p

拥有 window 对象的目的只是为了能够向其添加子视图,而不是当前视图控制器的视图。

谢谢

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:该属性通常放置在您AppDelegate的应用程序模板中,因为 XCode 使用界面构建器和 IBOutlet 来实例化UIWindow. 因此,如果您是手动创建窗口,则不需要那里的属性。

于 2011-06-24T13:01:16.463 回答