解雇键盘和dealloc()

时间:2012-05-12 07:08:56

标签: iphone keyboard dealloc dismiss

这里有一个引起'关注'......

我有一个使用键盘的模态视图控制器。我正在使用一个系统从stackoverflow上的代码中解除键盘,这似乎是识别键盘外部的点击以解除它的“新方法”......

// Register for keyboard dismissal
[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillShowNotification object:nil queue:nil usingBlock:^(NSNotification *notification) 
{
     UITapGestureRecognizer *tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)]autorelease];
     tap.numberOfTapsRequired = 1;
     tap.numberOfTouchesRequired = 1;
     tap.delegate = self;
     [self.view addGestureRecognizer:tap];
}];

[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillHideNotification object:nil queue:nil usingBlock:^(NSNotification *notification) 
{
    [self.view removeGestureRecognizer:[self.view.gestureRecognizers lastObject]];
}];

这很好但我注意到当我通过完成按钮将它解除时,我的视图控制器上没有调用dealloc。

这似乎与上面的代码有关。如果我在通知定义括号中注释掉可执行代码,那么当控制器被解除时,dealloc被称为ok ...(键盘没有被显示或解除,因此括号内的代码没有被执行)

有没有人建议在实施上述代码时为什么没有调用dealloc?

由于

飞图

1 个答案:

答案 0 :(得分:1)

使用block时,它将保留“self”,因此你需要删除观察者dealloc。