2010-05-10 60 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