这里有一个引起'关注'......
我有一个使用键盘的模态视图控制器。我正在使用一个系统从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?
由于
飞图
答案 0 :(得分:1)
使用block时,它将保留“self”,因此你需要删除观察者dealloc。