2014-06-24 87 views
0

我的項目將被編譯爲一堆遺留代碼(> 100個獨立方法)。所有不同的傳統方法都會在我的項目中達到相同的目的,他們只是做得不同。也就是說,它們都具有大致相同的輸入和相同的輸出,但是它們進行一些非常複雜的計算以獲得這些輸出,並且這些計算在不同方法之間可能會有很大差異。我希望只需在給定會話中調用其中一個方法,但下一個會話可能需要調用其他方法。在我的項目中,當我打算調用其中一種方法時,用戶將輸入足夠的信息,以便我能夠確定要調用哪種方法。動態方法在運行時調用

我可以處理這個問題的一種方法是使用巨大的if塊。我將不得不檢查幾個不同的條件。對於每個條件的組合,我會調用一個不同的傳統方法。這種方法的問題在於,從可讀性的角度來看,它會非常糟糕 - 實際上,如果塊的長度可能會達到100行。我想,也可能會有許多不同的其他性能問題,如if語句。

我想要做的是創建一個查找表,其中存儲要調用的方法的名稱(以字符串形式),並將其與需要檢查的不同條件進行配對。我的公司正在試圖將其政策轉向使用更多的查找表和更少的巨大if區塊。

有沒有辦法根據我從查找表中找回的「方法名稱」字符串調用方法?如果是這樣,那麼這樣的語法看起來像什麼?或者還有其他(更好的)方法來處理這個我沒有想到的方法嗎?或者,這個巨大的if區塊實際上更符合最佳實踐?

+0

呃,爲什麼我在做這件事時沒有出現[此鏈接](http://stackoverflow.com/questions/4446883/objective-c-calling-method-dynamically-with-a-string?rq=1)我的眼鏡還是在我打字的時候?我認爲這就是我正在尋找的東西 - 要試用它,會刪除我的問題,並且如果它能正常工作,請上傳關聯的問題。 – GeneralMike

+0

performSelector可能工作,但它的一個限制是,您無法附加儘可能多的參數,因爲您可能需要。 – Brandon

回答

0

NSInvocation可能會滿足您的需求。本質上它允許你從選擇器創建一個方法調用,然後再調用它。您可以使用NSSelectorFromString根據您查找的字符串創建選擇器。有一個很好的教程,我前一段時間收藏的NSInvocation http://a-coding.com/making-nsinvocations/

我不確定其他方式來完成你的目標,但我可以想象這種方法變得難以調試和跟蹤,儘管有時你永遠不知道,直到你實現它。

我使用NSInvocation一次將應用程序放入「演示」模式。我創建了一個完整的NSSInvocations數組,然後每當我的計時器函數被觸發時,我會抓住下一個調用並調用它,讓我的應用程序像某人使用它一樣行事。反正祝你好運。