由于我们的代码库的成熟,我开始不喜欢传球的字典,以此来打包的消息传递,或者信息更糟糕的是,函数参数的模式。它需要发送和接收函数都有一个未公开的字符串文字API。比传递NSDictionaries作为参数更好的模式?
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
thisObject, @"thisKey",
thatObject, @"thatKey",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....
,然后在someClass
的听众
- (void)someClassListener:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
ThisObject *ob1 = [info objectForKey:@"thisKey"];
ThatObject *ob2 = [info objectForKey:@"thatKey"];
}
你要记住,thisKey
和thatKey
是该通知ThisObject
类型和ThatObject
的按键,相信你可以的地方创造一些常量,这些键,但这并不能真正解决问题。
而且可以说你有一个需要15个参数的函数,你不打算做一个函数与15个参数,它会更容易(虽然少可读性)只是传递一个字典,但现在你有与上面相同的问题。
我在那些类的头文件(即一个头文件中有两个接口)中创建了残缺的'Message Classes',而Message Class只是你定义并发送给创建更强壮的方法的对象列表合同,但这感觉错了。
这将会是巨大的,如果我可以做类似typeDef
在头参数对象,但不支持NSObject
的唯一的东西,像int
或float
等
基本上我想在消息发送者和消息接收者之间创建一个更强大的合同,即该功能或通知。
我提到键的常量并不是一个好的解决方案,因为你仍然需要去查找关键是什么,而不是为值(对象)的内容创建一个强有力的契约,更像是一个建议。将数据封装到一个类中是我正在研究的一个方向,但为我想要传递的每条消息创建一个类似乎很麻烦,无论是2个参数都是10,您不同意吗? – Shizam 2013-02-21 20:17:39
@Shizam,如果这些消息将被放入不同的字典中,那么你可能需要不止一个类。但是,如果你谈论的是有时从字典中传递两个键的消息,有时候是10个,那么这仍然只是一个类对象。 – rdelmar 2013-02-21 20:30:17
@rdelmar在我们的程序中,我们可能会有10-15个独特的通知,每个通知都需要自己的类来定义它的消息属性。 – Shizam 2013-02-21 21:42:44