我使用的對象符合obj c協議來表示計算。有常量[1],變量[x]和操作[a + b]。所有這些對象都是不可變的(變量包含一個鍵(對於字典)和一個默認值(如果字典不包含該鍵的值,則使用該值))。從init返回另一個對象
由於對象是不可變的,所以我想在初始化對象時儘可能簡化計算。 (注意:變量字典允許不斷變化,所以我永遠不能根據變量的值來簡化,只有常量)。
例如,一個非常常見的用法是將變量加1:[[x] +1]。當這些嵌套時,我想從init中返回[[x] +2]而不是[[[x] +1] +1],以便這部分計算只需要執行一次。到現在爲止還挺好。
當兩個參數都是常量(例如[2 + 2])時,返回[4]是有意義的。但ARC對此抱怨,因爲[4]是遵循相同協議的不同類。
它讓我想到了我想要做的是不錯的形式。我通常會讓它們都從一個類(類集羣)繼承,但是我想爲常量使用NSNumber(通過擴展類)。
我可以將簡化邏輯移動到另一個方法,但這意味着必須經常分配額外的對象,並且我必須記得總是調用它:[[[[MyClass alloc] init] simplifiedCalc]。
我的選擇是:
- 只是沉默的編譯器(和 文檔中編寫一個徹底的註釋)
- 創建並調用單獨的「簡化」的方法,它 返回另一個對象(創建額外的對象)
- 執行其返回相同的對象 在初始化(例如[[[X] 1] 1]的優化 - > [[X] 2]),但需要爲[2 「簡化」 方法+2] = [4]的情況。
- ???
任何想法或建議表示讚賞。
而不是做在初始化這個工作,也許你應該有一個建立在聯合國簡化表達一個方便的方法,然後經過並簡化其並返回簡化的。 – 2012-02-16 19:55:52
這可能是解決方案。看起來我仍然需要創建一個額外的對象,但我想我可以在alloc/initing對象之前進行計算以避免這種情況。 – 2012-02-16 20:04:14
@凱文:想過之後,我認爲這是最好的解決方案。如果你把它寫成答案,我會將其標記爲正確的。 – 2012-02-16 20:07:27