对象分配init异常

时间:2012-02-01 20:26:50

标签: objective-c cocoa

我正在尝试编写的应用程序中看到有关对象分配和初始化的一些令人不安的违规行为。

我有一个'root'Modelcontroller对象,后者又包含对子控制器的引用。根控制器被称为modelController,在它的init方法中,它分配并进入子控制器,如下所示:

- (id)init
{
NSLog(@"%@", @"ModelController begin init");
self = [super init];
if (self) {

    LibraryController * tempLibrary = [[LibraryController alloc] init];
    self.library = tempLibrary;

    StoresController * tempStores = [[StoresController alloc] init];
    self.stores = tempStores;

    CLLocationManager * tempLocationManager = [[CLLocationManager alloc] init];
    self.locationManager = tempLocationManager;

}

NSLog(@"%@", @"ModelController complete init");

return self;
}

非常标准。子控制器的init代码在开头和结尾都包含一条NSLog消息,让我能够看到一切都很好。

属性定义为

@property (strong) LibraryController * library;
@property (strong) StoresController * stores;
@property (strong) CLLocationManager * locationManager;

我正在使用ARC。

让我感到困惑的是,有时我会看到来自其中一个子控制器的NSLog,而不是来自根控制器。有时我会从根控制器看到'begin init'日志消息,但不会看到'complete init'。有时我看不到init日志消息。无论如何,应用程序都会启动。

这似乎是随机发生的,在五次发射中的一次发射中或在二十次发射中的一次中发生。当它发生时,应用程序行为非常奇怪(但不是每一次,请注意),没有明显的原因,并且表现出一般的好奇心。“

作为旁注,我曾经在StoreController类的init方法中放置一个断点,当暂停执行时,在调试控制台中吐出一大块随机数据:

  

$ m2303,3503,3603,3703,3803,3903#00 $ m2303,3503,3603,3a03#00 $ 88ee410901000000981e420901000000001e42090100000060ee410901000000b062f668ff7f000070044391ff7f0000f00e0800000000000300000068200100dc62f668ff7f0000d862f668ff7f00000000000000000000717ddd8aff7f00000000000068200100801e420901000000000000000600000706000007000000007063f668ff7f000003280000000000007863f668ff7f000001ee410901000000f062f668ff7f00006c5bd391ff7f000000000000ff7f0000ab064391ff7f000000000000ffffffff032800000000000040   ......等等

我应该从哪里开始对此进行问题排查?

modelController是从MyDocument等效类中初始化的alloc,并被建模为单例。

单例实现如下所示:

static ModelController *sharedModelController = nil;

+ (ModelController*)sharedManager
{
    if (sharedModelController == nil) {
        sharedModelController = [self new];
    }
    return sharedModelController;
}

最后说明:我已尝试删除locationManager内容并禁用/启用方案中的“恢复状态”首选项,但无济于事。

2 个答案:

答案 0 :(得分:1)

听起来你正在做一些不在主线程上的UI东西。 这通常会导致奇怪的行为。 确保在主线程上调用与UI相关的所有内容

答案 1 :(得分:0)

最佳猜测:ModelController对象正在发布。也许单身人士有缺陷。