我可以在通知中更改用户信息

时间:2011-12-08 22:40:29

标签: objective-c hook

我需要在目标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中实现可中断的钩子?

2 个答案:

答案 0 :(得分:0)

这完全不安全,如果你这样做,你可能会崩溃你的应用程序。

我认为你要找的是“delegate or delegation pattern。”

答案 1 :(得分:0)

我的猜测是它有效,但由于API是一个不可变对象,你不应该这样做。如果它今天正常工作,它可能会破裂。

你总是可以在字典中传递self,并让听众向它发送一条消息。

(我假设您希望利用这样一个事实,即您可以拥有任意数量的侦听器 - 委派更简单,但您只能获得一个委托。)