0

我有一个启用 ARC 的项目

viewDidLoad中添加的观察者很少

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getSipNotification:) name:@"getSipNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(syncExtensionData:) name:@"syncExtensionData" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLocalNotification:) name:@"showLocalNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outgoingCall:)  name:@"outgoingCall" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playRingtone)  name:@"playRingtone" object:nil];

我想删除所有观察者,所以我在viewDidUnload中添加了以下行

[[NSNotificationCenter defaultCenter] removeObserver:self];

现在我的问题是,这是否会删除所有观察者?

如果没有怎么办?

更新

如果我想删除一个观察者怎么办?

你能帮我吗。

4

4 回答 4

2

在我的应用程序中,我使用了这个通知:

对于特定的观察者以这种方式删除:

 -(void)viewWillAppear:(BOOL)animated
 {

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceRotatedFeedBackView:) name:UIDeviceOrientationDidChangeNotification object:nil];

}
-(void)deviceRotatedFeedBackView:(NSNotification*)notification
{
    //right whetever you want
}
 - (void)viewWillDisappear:(BOOL)animated
{

  [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}

可能对你有帮助。

于 2013-10-03T09:47:43.683 回答
2

是的,它将删除所有观察者。

 [[NSNotificationCenter defaultCenter] removeObserver:self];

你可以像这样删除一个特定的观察者......

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"syncExtensionData" object:nil];
于 2013-10-03T09:30:57.303 回答
1

是的,它将删除您班级中的所有观察者。

您可以使用以下方法删除单个观察者:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"getSipNotification" object:nil];

删除个人观察者。

于 2013-10-03T09:32:04.397 回答
0

viewDidUnload 在 iOS6 及更高版本中已弃用,因此您的观察者永远不会从 iOS6 及更高版本的通知中心中删除。要删除单个观察者,请尝试

- (void)removeObserver:(id)notificationObserver 名称:(NSString *)notificationName 对象:(id)notificationSender
于 2013-10-03T09:51:48.927 回答