项目里使用了 Swizzlling Method 黑魔法来防止 NSArray 越界之类的崩溃。
App 在使用键盘时切换到后台,就会触发一个非法访问的崩溃:
*** -[UIKeyboardLayoutStar release]: message sent to deallocated instance ...
去掉黑魔法造成的风险太大了。
解决方法是禁用黑魔法的 ARC,添加编译标志 -fno-objc-arc
。
还要在 Swizzlling Method 的所有方法内部使用 @autoreleasepool {}
把代码包起来:
- (void)__insertObject:(id)anObject atIndex:(NSUInteger)index {
@autoreleasepool {
if (anObject && index <= self.count) {
[self __insertObject:anObject atIndex:index];
}
}
}