我需要在目标c中创建可中断的钩子。如果任何钩子回调中断操作,可中断钩子应该能够中止操作。我想过使用NSNotificationCenter
就像:
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setObject: [NSNumber numberWithBool: NO] forKey: @"interrupted"];
[notificationCenter postNotificationName: @"Operation A will happen"
object: self userInfo:userInfo];
if(![[userInfo objectForKey: @"interrupted"] boolValue])
{
[self doOperationA];
}
并且在钩子上
-(void) operationAWillHappen: (NSNotification *) note
{
if(someCondition)
[(NSMutableDictionary *)note.userInfo setObject:
[NSNumber numberWithBool: YES] forKey: @"interrupted"];
}
我可以更改用户信息吗?有没有更好的方法在目标c中实现可中断的钩子?
答案 0 :(得分:0)
这完全不安全,如果你这样做,你可能会崩溃你的应用程序。
我认为你要找的是“delegate or delegation pattern。”
答案 1 :(得分:0)
我的猜测是它有效,但由于API是一个不可变对象,你不应该这样做。如果它今天正常工作,它可能会破裂。
你总是可以在字典中传递self,并让听众向它发送一条消息。
(我假设您希望利用这样一个事实,即您可以拥有任意数量的侦听器 - 委派更简单,但您只能获得一个委托。)