随着我们的代码库的成熟,我开始不喜欢传递字典的模式来打包消息传递的信息,或者更糟糕的是,函数参数。它需要发送和接收函数都具有未记录的字符串文字 API。
..in some function..
NSDictionary *info = [NSDictionary dictionaryWithObjectsAndKeys:
thisObject, @"thisKey",
thatObject, @"thatKey",
nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MY_NOTIFICATION" object:nil userInfo:info];
....
然后 insomeClass
的听众
- (void)someClassListener:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
ThisObject *ob1 = [info objectForKey:@"thisKey"];
ThatObject *ob2 = [info objectForKey:@"thatKey"];
}
您必须记住,thisKey
并且thatKey
是类型的键,ThisObject
并且ThatObject
对于该通知,确保您可以在某处为这些键创建一些常量,但这并不能真正解决问题。
假设你有一个需要 15 个参数的函数,你不会创建一个有 15 个参数的函数,只传递一个字典会容易得多(虽然可读性较差),但现在你遇到了与上面相同的问题.
我尝试在这些类的头文件中创建存根的“消息类”(即一个头文件中的两个接口),而消息类只是您定义并发送到创建更强大合同的方法的对象列表,但这感觉错误的。
如果我可以typeDef
在标头中执行诸如参数对象之类的操作,但它不支持NSObject
仅诸如int
or之类的东西,那就太好了float
。
本质上,我试图在消息发送者和消息接收者之间创建一个更强大的合同,无论是功能还是通知。