2012-06-16 73 views
0

我在UIViewController類上創建了一個Objective-C類別。在我的項目中,我想要一種簡單易用的方式來獲取應用程序代理。Objective-C類別返回AppDelegate屬性

下面是我在做什麼

// header file UIViewController+AppDelgate.h 
#import <UIKit/UIKit.h> 

@class ExampleAppDelegate; 

@interface UIViewController (AppDelegate) 
@property (weak, nonatomic, readonly) ExampleAppDelegate *appDelegate; 
@end 

// implementation file UIViewController+AppDelegate.m 
#import "UIViewController+AppDelegate.h" 
#import "ExampleAppDelegate.h" 

@implementation UIViewController (AppDelegate) 

- (ExampleAppDelegate *) appDelegate { 
    return (ExampleAppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

@end 

我應該定義屬性弱?我認爲保留這個人是不好的,因爲它通常保留在引用的視圖控制器中。

回答

1

弱/強在這種情況下是一個爭議點,因爲沒有本地實例變量持有指針。 ARC會做正確的事情(即,對於任何給定的範圍,它不會發布比發佈更多的保留)。

+0

在不使用ARC的情況下,我仍然可以使用弱。或者這不是真的嗎? – developerdoug

+0

因爲你沒有定義一個實際的實例變量,我只是聲明在運行時會存在一個「getter」,所以我不確定他們在沒有ARC的情況下是否有問題。 –

0

爲什麼不創建一個類的方法,做同樣的事情的實用工具類,那麼你可以參考它是這樣的:

[Utility appDelegate]; 

,你不會有一個屬性添加到需要每一個視圖控制器訪問AppDelegate,這是你目前設置的方式。

+0

此類別可能更有效,因爲它將方法添加到現有類中,而不是添加其他類。它不是「爲每一個添加一個屬性」,而是「將這一小塊代碼方便地用於任何實例」 –

+0

我真的很喜歡在任何視圖控制器中能夠引用它的想法。這樣我就不必''(ExampleAppDelegate *)[[UIApplication sharedApplication]委託]'遍佈各處。 – developerdoug

+0

@developerdoug我可以看到爲你添加一個類是如何簡單,但是如果你想在不同的類中使用你的代碼,比如邏輯類或者子類UINavigationBar等,你將不得不長時間參考它除非你創建另一個類別,或者只是使用像我所建議的實用程序類。 –

0

從你實現你不需要定義一個屬性的外觀,你只需要聲明的方法-(ExampleAppDelegate *)appDelegate;

這當然如果調用的類的實例,除非你做它一個類只會工作方法。

+0

非常真實,但我寧願有一個屬性。 – developerdoug