gpt4 book ai didi

ios - NSOperationQueue NSOperation USER_INITIATED 崩溃

转载 作者:行者123 更新时间:2023-11-29 12:20:23 25 4
gpt4 key购买 nike

我在我的应用程序中使用了 NSOperation 和 NSOperationQueue。当遇到下面的EXC_BAD_ACCESS crash warning时,我应该从哪里开始调试呢?我只是用谷歌搜索,但没有找到答案。

enter image description here

添加更多信息,这里是 Debug Navigator 的屏幕截图 enter image description here

是不是放东西的时候闪退了?

更新

我刚刚启用了 Zombie Objects 并获得了以下信息

*** -[AFJSONResponseSerializer release]: message sent to deallocated instance 0x7fdfb378b550

添加更多信息,我没有在我的应用程序中使用 ARC。对于 AFNetwork 库,我为 AFNetwork 中的每个 *.m 文件添加了 -fobjc-arc

我想知道:

  1. 根据之前在stackoverflow上找到的一些答案,我没有为每个NSOperation添加@autoreleasepool,对吗?
  2. 我是否还需要为我在应用程序中实现的每个 *NSOperation.m 添加 -fobjc-arc
  3. 这是 AFNetwork 的已知问题吗?

最佳答案

如果您将 objc_release 视为罪魁祸首,那么它正试图发布以下内容:

  • 已经解除分配
  • 不是[有效]对象

(或者您的堆栈到目前为止已损坏,以至于它调用了错误的函数,但这不太可能)。

首先,展开......并查看它是否显示任何有用的内容(某处有一个 slider 可以显示更多详细信息)。

其次,从风格的角度来看,您可能希望更直接地使用 block 而不是 NSOperation。然后你可以使用任何一个

  • -[NSOperationQueue addOperationWithBlock:]
  • dispatch_async ( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT) , ^{ ... } ) ;

除此之外,您仍然需要对其进行调试。

您在使用 ARC 吗?如果是这样,这几乎肯定与其中一条线有关:

// This keeps an unretained Objective-C pointer. Later, if you
// try to use it, it may retain it and release it.
__unsafe_unretained id object = someObjectiveCObject ;

// This bridges the object, but doesn't retain it. If you
// bridge it back later, it'll try to release it at the end,
// but you never owned it.
CFTypeRef object = (__bridge CFTypeRef) someObjectiveCObject ;
id later = (__bridge_transfer id) object ;

// This uses an uninitialized pointer
CFTypeRef object ;
dispatch_async ( dispatch_get_main_queue() , ^{
id object = (__bridge_transfer id) object ;
} ) ;

如果不是,那你为什么不呢?在这种情况下,您将不得不搜索您的代码以找到您没有保留某些内容的地方。

我强烈建议运行 Xcode 的静态分析器并非常仔细地查看它突出显示的每一个事物 - 它非常擅长发现这些问题,因为它知道所有权及其转移。

更新

由于您没有使用 ARC,因此可能更难找到问题,因为现在可能出现的问题更大了。希望分配的类不多。

我建议修改该类的代码,添加这些:

- (id) retain {
return [super retain] ;
}
- (void) release {
[super release] ;
}

然后在它们上面放置断点(加上它们的初始化器和 dealloc 方法)并查看它们在何处被调用。然后跟踪该对象以找到一个您认为它不拥有它但它仍在调用 -release 的地方。

静态分析器是您的 friend :也可以使用它。

关于ios - NSOperationQueue NSOperation USER_INITIATED 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814115/

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