由於我們的代碼庫的成熟,我開始不喜歡傳球的字典,以此來打包的消息傳遞,或者信息更糟糕的是,函數參數的模式。它需要發送和接收函數都有一個未公開的字符串文字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