2011-06-24 58 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。所以,如果你正在手工創建你的窗戶,那裏沒有必要有一個物業。