2011-06-24 61 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

为什么不使用

@property (nonatomic, assign) UIWindow *window 

那么你就不是保留它。

鉴于窗口应该在您的应用程序的生命周期中存在,因此它没有真正的需要保留它,因为它已被您的应用程序委托保留。

有在此方案中的第一个地方的属性无非是语法糖更

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

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

非常感谢。 :)分配它。这就是我认为你看到的,我不需要拥有它,因为它已经拥有。 :) –

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 
0

其实更加简洁,不,你没有。

每当你使用任何的UIWindowMake Key Window方法(因为你可能是您的AppDelegate里面做的),如

- makeKeyAndVisible
- makeKeyWindow

的窗口变得可从所有您的应用程序只需使用UIApplication'skeyWindow属性。

[[UIApplication sharedApplication] keyWindow] 

因此,没有必要为一个属性或在您的AppDelegate保留或其他地方,因为它会被你的应用程序类被保留。

OBS:该属性通常放置在您的AppDelegate中,因为来自XCode的应用程序模板使用界面构建器和IBOutlet来实例化UIWindow。所以,如果你正在手工创建你的窗户,那里没有必要有一个物业。