2

我有一个从情节提要中提取的手势识别器,它工作得很好而且很花哨......

除非我模拟低内存警告。那时,它会因错误而崩溃:

[UISwipeGestureRecognizer retain]: message sent to deallocated instance 0x8627330

为了让它不崩溃,我要做的就是将手势识别器设置为一个强属性,并在 viewdidload 中注释掉自动生成的集合为 nil:

//[self setSwipeGestureRecognizer:nil];

我随机得到了这个解决方案,我希望有人能解释这里发生了什么?

4

1 回答 1

5

迷人。当您第一次发布此内容时,我假设您的代码存在一些问题,但鉴于您的澄清评论,我决定自己尝试一下。我遇到与您相同的行为。

具体来说,我在 Interface Builder 中创建了一个手势识别器并将其链接到适当的IBAction并确认它工作正常,即使我推送到另一个视图控制器并从另一个视图控制器弹出。但是,如果我在该辅助视图控制器上模拟内存警告,则在返回原始视图控制器后立即收到与您相同的崩溃。

它很容易补救。看起来你有一个方法,或者你可以完全绕过 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
}

如果您像这样手动创建它,则在模拟内存警告后返回视图时不会发生崩溃。所以这就是你的解决方案。

幸运的是,在 Xcode 和 iOS 的下一个版本的测试版中,这似乎已经得到了解决。

于 2012-07-01T18:27:30.973 回答