[UIKeyboardLayoutStar release] && [UIKeyboardTaskEntry dealloc]

这篇文章是近期解过的一个bug,由于我的日志是在Crashlytics上拿到的,很有迷惑性,此次写下来希望对遇到这种错误的小伙伴有帮助。
1.先上崩溃日志:
#0. Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x18da99704 objc_object::release() + 8
1 libsystem_blocks.dylib 0x18df27a28 _Block_release + 144
2 UIKit 0x19597ab48 -[UIKeyboardTaskEntry dealloc] + 68
3 libobjc.A.dylib 0x18da99fe0 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 704
4 CoreFoundation 0x18ef22028 _CFAutoreleasePoolPop + 28
5 UIKit 0x195181ae8 _prepareForCAFlush + 596
6 UIKit 0x194ef113c _afterCACommitHandler + 304
7 CoreFoundation 0x18eff60c0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
8 CoreFoundation 0x18eff3cf0 __CFRunLoopDoObservers + 372
9 CoreFoundation 0x18eff4180 __CFRunLoopRun + 1024
10 CoreFoundation 0x18ef222b8 CFRunLoopRunSpecific + 444
11 GraphicsServices 0x1909d6198 GSEventRunModal + 180
12 UIKit 0x194f697fc -[UIApplication _run] + 684
13 UIKit 0x194f64534 UIApplicationMain + 208
14 xxxxxxxx 0x10012e304 main (main.m:14)
15 libdispatch.dylib 0x18df055b8 (Missing)

这段日志看似是崩溃在系统里面,是像一个已经release的对象发送了消息,经过多方搜索,终于找的了这个问题的原因。是因为我用method swizzle 将NSArray和NSMutableArray的objectAtIndex:方法用自己的方法替换掉了。这个bug的复现方法是找到一个可以显示keyboard的页面,然后按home键退到后台,然后这个bug就会复现了。前提你的Xcode的Zombie Objects是开着的。这个bug的解决办法就是恢复到系统原油的objectAtIndex:就好了。至于为什么会出这个错误,我想是因为在objectAtIndex:实现了并不是简单的获取object的操作才导致了这个崩溃的出现。

参考文档:
http://www.cnblogs.com/DamonTang/p/4342366.html
http://blog.csdn.net/alincexiaohao/article/details/45913857

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值