2010-05-10 63 views
0

這是我的單身代碼(相當多的樣板):使用數據管理辛格爾頓

@interface DataManager : NSObject { 
    NSMutableArray *eventList; 
} 

@property (nonatomic, retain) NSMutableArray *eventList; 

+(DataManager*)sharedDataManager; 

@end 

然後是.M:

#import "DataManager.h" 

static DataManager *singletonDataManager = nil; 

@implementation DataManager 

@synthesize eventList; 

+(DataManager*)sharedDataManager { 
    @synchronized(self) { 
     if (!singletonDataManager) { 
      singletonDataManager = [[DataManager alloc] init]; 
     } 
    } 
    NSLog(@"Pulling a copy of shared manager."); 
    return singletonDataManager; 
} 

所以後來在我的AppDelegate,我推出之前加載一些東西我的第一個看法:

NSMutableArray *eventList = [DataManager sharedDataManager].eventList; 

.... 

NSLog(@"Adding event %@ to eventList", event.title); 
[eventList addObject:event]; 
NSLog(@"eventList now has %d members", [eventList count]); 
[event release]; 

正如你所看到的,我已經用NSLog愛筆記給自己穿上了代碼。輸出到Log的內容如下:

2010-05-10 09:08:53.355 MyApp[2037:207] Adding event Woofstock Music Festival to eventList 
2010-05-10 09:08:53.355 MyApp[2037:207] eventList now has 0 members 
2010-05-10 09:08:53.411 MyApp[2037:207] Adding event Test Event for Staging to eventList 
2010-05-10 09:08:53.411 MyApp[2037:207] eventList now has 0 members 
2010-05-10 09:08:53.467 MyApp[2037:207] Adding event Montgomery Event to eventList 
2010-05-10 09:08:53.467 MyApp[2037:207] eventList now has 0 members 
2010-05-10 09:08:53.524 MyApp[2037:207] Adding event Alamance County Event For June to eventList 
2010-05-10 09:08:53.524 MyApp[2037:207] eventList now has 0 members 

...什麼給了?我沒有錯誤進入我的eventList NSMutableArray。但我addObject:默默地失敗?

回答

0

我猜你沒有在你的DataManager的init方法中創建一個eventList?

- (id) init { 
    if (self = [super init]) { 
     eventList = [NSMutableArray alloc] init]; 
    } 
return self; 
} 
+0

好的。這有效,但我感到困惑。在沒有其他課程的情況下,我必須特別初始化我的ivars/properties,我可以在那裏充電並使用它們,就像它們已經存在一樣。這是否與所有權問題有關?或者因爲它的特殊之處在於我們希望永久保留它直到操作系統在應用程序關閉時回收我們。 – 2010-05-10 14:20:16

+0

在你的其他類中,我猜你是繼承自UIViewController等東西。Apple已經完成了爲你實例化Ivars的工作。隨着您開始在代碼中使用更多的自定義對象,您會一直這樣做。這與這種單身性質無關。 – deanWombourne 2010-05-10 14:37:53

+0

你還應該記得打電話給[eventList release];在你的init方法中聲明的所有ivars /屬性的dealloc方法中,或者你會得到memroy泄漏(這是一個單例,所以實際上這不是一個問題,但無論如何這是一個很好的做法)。 – deanWombourne 2010-05-10 14:39:47