*** -[UIKeyboardLayoutStar release]: message sent to deallocated instance

Aug 29, 2020 • 预计阅读时间 1 分钟

项目里使用了 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];
        }
    }
}
iOS
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

Swift 的逃逸闭包和非逃逸闭包

NS_ASSUME_NONNULL_BEGIN & NS_ASSUME_NONNULL_END