2011-10-11 34 views
1

在我的iOS應用程序中,我有一組由應用程序啓動時由我的應用程序委託創建的單例對象,它們可以從應用程序的每個視圖控制器訪問。這些對象以應用程序委託屬性的形式存儲。iOS:請求一個單身人士的參考或保持它是否更好?

我想知道是否更好的做法是在每次需要時獲得對這些對象的引用([SharedAppDelegate.singletonName方法]),還是爲每個視圖控制器存儲專用引用會更好一些需要對象?

也許根據我將訪問該對象的次數進行權衡?或者我只是過分追求,幾乎沒有區別?

非常感謝。

回答

2

爲什麼在應用程序委託中存儲引用而不是在單例對象本身的靜態變量中 - 這是常見做法?

如果您擔心性能問題,因爲您在單例init中初始化了許多對象,只需在需要數據時執行延遲初始化。

在應用程序委託中存儲對象並不是真正的單例。你可以使用GCD來創建一個單例。

@interface MYSingleton 

+ (id)sharedInstance; 

@end 

@implementation MYSingleton 

+ (id)sharedInstance { 
    static dispatch_once_t once; 
    static MyFoo *sharedInstance; 
    dispatch_once(&once, ^{ 
    sharedInstance = [[self alloc] init]; 
    }); 
    return sharedInstance; 
} 

@end 

在每個視圖控制器中創建許多不必要的訪問器只是純粹的矯枉過正和浪費時間。