objc_msgSend [__NSArrayM dealloc] 崩溃报告有时来自 Crashlytics
objc_msgSend [__NSArrayM dealloc] crash report sometimes from 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
您的 NSArray 似乎已发布并且您想访问它,因此发生了这次崩溃。
您可以在模型中将 NSArray 定义为 Strong 或 VC
@property(nonatomic, strong) NSArray *myArray
如果您猜不出哪个 NSArraY 已发布,我建议您使用仪器中的 NSZombie 对象调试您的应用程序以找到准确的 NSArray
这种事在我身上发生过很多次。只需为代码中的每个 NSArray
添加强引用。然后你将永远不会看到你所看到的错误。
最好使用下面的代码:
@property(strong) NSArray *myArray.
CoreFoundation _CFAutoreleasePoolPop + 28
自动释放池正在耗尽,可能在 UI 循环结束时。这意味着池中所有自动释放的对象现在都已释放。
CoreFoundation -[__NSArrayM dealloc] + 152
正在释放一个可变数组。这意味着它持有的所有项目也将被释放。
CoreFoundation CFRelease + 524
数组中的一项正在释放。
崩溃,该项目无效,它已经被解除分配。
您应该检查的是数组中的项目。有些东西肯定是过度释放了。如果您正在使用手动引用计数,您应该检查放入数组中的对象 - 其中一项已被释放但仍保留在某个数组中。
在 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
原来是框架的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 日星期六,我能够让 Apple 执行加速 App Review,并且带有 Crashlytics 3.0.10 的新版本已于星期六发布到 App Store。正如您所看到的,在发布后的几天内,无崩溃率现在又回到了 99%,并朝着 99.9% 的方向发展。
我希望这能帮助那些因崩溃框架而焦头烂额的人。至少他们很快解决了这个问题,新版本似乎完全解决了这个问题。
我最近在更新到 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
您的 NSArray 似乎已发布并且您想访问它,因此发生了这次崩溃。 您可以在模型中将 NSArray 定义为 Strong 或 VC
@property(nonatomic, strong) NSArray *myArray
如果您猜不出哪个 NSArraY 已发布,我建议您使用仪器中的 NSZombie 对象调试您的应用程序以找到准确的 NSArray
这种事在我身上发生过很多次。只需为代码中的每个 NSArray
添加强引用。然后你将永远不会看到你所看到的错误。
最好使用下面的代码:
@property(strong) NSArray *myArray.
CoreFoundation _CFAutoreleasePoolPop + 28
自动释放池正在耗尽,可能在 UI 循环结束时。这意味着池中所有自动释放的对象现在都已释放。
CoreFoundation -[__NSArrayM dealloc] + 152
正在释放一个可变数组。这意味着它持有的所有项目也将被释放。
CoreFoundation CFRelease + 524
数组中的一项正在释放。
崩溃,该项目无效,它已经被解除分配。
您应该检查的是数组中的项目。有些东西肯定是过度释放了。如果您正在使用手动引用计数,您应该检查放入数组中的对象 - 其中一项已被释放但仍保留在某个数组中。
在 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
原来是框架的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 日星期六,我能够让 Apple 执行加速 App Review,并且带有 Crashlytics 3.0.10 的新版本已于星期六发布到 App Store。正如您所看到的,在发布后的几天内,无崩溃率现在又回到了 99%,并朝着 99.9% 的方向发展。
我希望这能帮助那些因崩溃框架而焦头烂额的人。至少他们很快解决了这个问题,新版本似乎完全解决了这个问题。