当与通知一起使用时,我对代理和选择器的概念不熟悉。所以我的第一个问题是,
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];
}
对不起,如果这些是基本问题。我不确定这样的事情的最佳实践是什么,并希望以正确的方式开始。感谢。
答案 0 :(得分:0)
如果委托协议将doWork
方法实现为必需方法,则为是。但是,如果它是一种可选方法,或者您想要更安全,则应使用
if ([delegate respondsToSelector:@selector(doWork)]) {
[delegate doWork];
}
当然,这似乎是一件合理的事情。这是使代码更健壮的常用方法。通知的userInfo就在那里,您可以根据需要发送数据。但是,我认为在您的代码中,您的意思是[notification userInfo]
而不是[userInfo notification]
。