我需要在这里拥有@property吗?

时间:2011-06-24 12:38:27

标签: iphone ios uiwindow

基本上我希望能够在我的课程中一直访问UIApplication委托的window属性,所以我想用iVar来引用它。

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

因此,我应该在.h文件中添加变量引用吗?

#import <UIKit/UIKit.h>


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

@property (nonatomic, retain) UILabel *messageLabel;

@end

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

我持怀疑态度,因为该属性将是nonatomic, retain,但我不想保留它,除非我真的这么做,我只是很厚! :P

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

由于

3 个答案:

答案 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。因此,如果您手动创建窗口,那么就不需要属性。