gpt4 book ai didi

objective-c - 对象分配初始化不规则

转载 作者:行者123 更新时间:2023-12-03 17:59:09 24 4
gpt4 key购买 nike

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

我有一个“根”Modelcontroller 对象,该对象又包含对子 Controller 的引用。根 Controller 称为 modelController,在它的 init 方法中它分配并初始化子 Controller ,如下所示:

- (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;
}

相当标准。子 Controller 的初始化代码还在开头和结尾包含 NSLog 消息,以便我能够看到一切都很好。

属性定义为

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

我正在使用 ARC。

令我困惑的是,有时我会看到来自子 Controller 之一的 NSLog,但看不到来自根 Controller 的 NSLog。有时我会看到来自根 Controller 的“开始初始化”日志消息,但看不到“完整初始化”。有时我看不到初始化日志消息。在任何这些情况下应用程序都会启动。

这种情况看似随机发生,五分之一或二十次发射中就有一次。当这种情况发生时,该应用程序的行为非常奇怪(但不是每次,请注意),无缘无故地玩沙滩球,并且表现出普遍的不稳定。

顺便说一句,有一次我在 StoreController 类的 init 方法中放置了一个断点,该断点在暂停执行时在调试控制台中吐出一大块随机数据:

$m2303,3503,3603,3703,3803,3903#00$m2303,3503,3603,3a03#00$88ee410901000000981e420901000000001e42090100000060ee410901000000b062f668ff7f000070044391ff7f0000f00e0800000000000300000068200100dc62f668ff7f0000d862f668ff7f00000000000000000000717ddd8aff7f00000000000068200100801e420901000000000000000600000706000007000000007063f668ff7f000003280000000000007863f668ff7f000001ee410901000000f062f668ff7f00006c5bd391ff7f000000000000ff7f0000ab064391ff7f000000000000ffffffff032800000000000040 ...and so on

我应该从哪里开始解决这个问题?

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

单例实现如下所示:

static ModelController *sharedModelController = nil;

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

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

最佳答案

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

关于objective-c - 对象分配初始化不规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com