调用委托方法和调用选择器

时间:2012-03-28 23:22:16

标签: iphone

当与通知一起使用时,我对代理和选择器的概念不熟悉。所以我的第一个问题是,

1)假设您有一个按钮,该按钮具有实现某种doWork方法的委托。如果你想要在方法中使用相同的功能,那么调用该方法是否“可以”?我不知道这是否被认为是良好的编码实践和/或是否应该这样做,或者在获得这种类型的功能时做一些不同的事情。就好,如果这是好的架构?

2)同样,在NSNotificationCenter中,我看到一些发布通知的代码。然后有一个HandleSegmentedControl:(NSNotification *)notification方法。如果我想手动拥有该功能,但没有按下段控件,那么从该方法中取出该功能并将其置于新方法中就可以了,所以它看起来像这样:

原件:

- (void)HandleSegmentedControl:(NSNotification *)notification {
    NSDictionary *dict = [userInfo notification];
    // do stuff with the dictionary
}

新:

- (void)HandleSegmentedControl:(NSNotification *)notification {
     NSDictionary *dict = [userInfo notification];
     [self newMethod:dict];
}

- (void)newMethod:(NSDictionary *)dict {
    // do stuff with the dictionary
}

- (void)myOtherMethodThatNeedsTheSameFunctionality {
     NSDictionary *dict = // create some dictionary
     [self newMethod:dict];
}

对不起,如果这些是基本问题。我不确定这样的事情的最佳实践是什么,并希望以正确的方式开始。感谢。

1 个答案:

答案 0 :(得分:0)

  1. 如果委托协议将doWork方法实现为必需方法,则为是。但是,如果它是一种可选方法,或者您想要更安全,则应使用

    if ([delegate respondsToSelector:@selector(doWork)]) {
        [delegate doWork];
    }
    
  2. 当然,这似乎是一件合理的事情。这是使代码更健壮的常用方法。通知的userInfo就在那里,您可以根据需要发送数据。但是,我认为在您的代码中,您的意思是[notification userInfo]而不是[userInfo notification]