objc_msgSend 崩溃报告有时来自Crashlytics

我最近收到这个程序后更新到Crashlytics 3.0不知道它是否来自我的代码或其他东西。 崩溃报告是难以追查的

Here is the crash report Crashed: com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x000000009a0dbeb8 0 libobjc.A.dylib objc_msgSend + 16 release 1 CoreFoundation CFRelease + 524 2 CoreFoundation -[__NSArrayM dealloc] + 152 3 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564 4 CoreFoundation _CFAutoreleasePoolPop + 28 5 Foundation -[NSAutoreleasePool release] + 148 6 UIKit -[UIApplication _run] + 588 7 UIKit UIApplicationMain + 1488 8 MyAppName main.m line 32main 9 libdyld.dylib start + 4 

原来是框架工作的bug

这是我从Crashlytics的支持得到的

如果你更新到Crashlytics SDK的3.0.10,那么这个应该是全部设置 – 在3.0.9中有一个罕见的竞争条件,我们用最新版本打补丁。 打开Fabric.app,更新框架,你会很好去:)

Crashlytics的支持团队非常棒!

确认这是由我的应用程序按照https://dev.twitter.com/fabric/overview/changelog在2015年6月10日发布的Crashlytics 3.0.9中引入的。

更新为Crashlytics 3.0.10,并在周六推出紧急更新。 结果不言自明:

周一发布了99.9%的免费版本,星期二发布了更新,到6月26日星期五,免费速率降至98.3%,超过了遇到崩溃的用户数量的16倍。 6月27日星期六,我能够让苹果公司进行加速的应用程序审查,并与Crashlytics 3.0.10的新版本被释放到App Store上周六。 正如你所看到的,几乎在释放率回到99.9%后几天,崩盘率已经回落到99%。

我希望这可以帮助那些不顾你的崩溃框架而引发的崩溃的人。 至less他们很快就解决了,新版本似乎完全解决了这个问题。

 CoreFoundation _CFAutoreleasePoolPop + 28 

自动释放池正在被耗尽,可能在UI循环结束。 这意味着池中的所有自动释放对象现在都被释放。

 CoreFoundation -[__NSArrayM dealloc] + 152 

一个可变数组正在被释放。 这意味着它所持有的所有物品也将被释放。

 CoreFoundation CFRelease + 524 

arrays中的一个项目正在释放。

崩溃,该项目无效,已被释放。

你应该检查的东西是数组中的项目。 东西肯定是过分的。 如果您正在使用手动引用计数,则应该检查放入数组的对象 – 其中一个项目被解除分配,但仍保留在某个数组中。

在MRC下会触发类似错误的代码如下:

 NSMutableArray *array = [NSMutableArray array]; //an autoreleased array NSObject *object1 = [[NSObject alloc] init]; NSObject *object2 = [[NSObject alloc] init]; [array addObject:object1] [array addObject:object2] [object1 release]; [object2 release]; //let's overrelease [object1 release]; //when array is released, it will send a release message to object1, too 

看来你的NSArray发布了,你想访问它,所以这次崩溃发生。 你可以在你的模型或VC中定义你的NSArray为Strong

 @property(nonatomic, strong) NSArray *myArray 

如果你不能猜测哪个NSArraY已经发布了,我推荐你用NSZombie Object在乐器中debugging你的应用程序来find确切的NSArray

它多次发生在我身上。 只需在代码中为每个NSArray添加强引用。 然后你永远不会看到你所看到的错误。

最好使用下面的代码:

 @property(strong) NSArray *myArray.