我有一个从 Storyboard 中提取的手势识别器,它运行良好且花哨......
除了当我模拟内存不足警告时。此时,它崩溃并出现错误:
[UISwipeGestureRecognizer retain]: message sent to deallocated instance 0x8627330
为了让它不崩溃,我要做的就是将手势识别器设置为强属性,并在 viewdidload 中将自动生成的设置注释掉为 nil:
//[self setSwipeGestureRecognizer:nil];
我随机得到这个解决方案,我希望有人能解释一下这里发生了什么?
最佳答案
令人着迷。当您第一次发布此内容时,我假设您的代码存在一些问题,但考虑到您的澄清评论,我决定自己尝试一下。我也经历过和你一样的行为。
具体来说,我在 Interface Builder 中创建了一个手势识别器,并将其链接到适当的 IBAction 并确认它工作正常,即使我从另一个 View Controller 推送和弹出也是如此。但是,如果我在辅助 View Controller 处模拟内存警告,那么在返回原始 View Controller 后,我会立即收到与您相同的崩溃信息。很容易修复。看起来您有一种方法,或者您可以完全绕过 Interface Builder,并在代码中创建您自己的手势识别器,并且您不会遇到此问题,例如,
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self.view addGestureRecognizer:recognizer];
// [recognizer release]; // uncomment in non-ARC project
}
如果您像这样手动创建它,则在模拟内存警告后返回 View 时不会发生崩溃。这就是你的解决方案。
幸运的是,看起来这个问题已经在下一版 Xcode 和 iOS 的测试版中得到了解决。
关于objective-c - IB 的 GestureRecognizers 在模拟内存警告时导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11279820/