我想創建一個方法,該方法可以採用NSMutableArray
或NSArray
對象。一種同時採用NSArray和NSMutableArray的方法
我想我可以只使用(id)作爲參數類型...或在通過之前將NSArray
轉換爲NSMutableArray
。不過,我對這些解決方案並不滿意。
在其他語言中我可能會傳遞一個IList
或某些共享對象,它們都繼承...
我需要通過我的方法數組枚舉。
人們通常在目標c中做到這一點的方式是什麼?
我想創建一個方法,該方法可以採用NSMutableArray
或NSArray
對象。一種同時採用NSArray和NSMutableArray的方法
我想我可以只使用(id)作爲參數類型...或在通過之前將NSArray
轉換爲NSMutableArray
。不過,我對這些解決方案並不滿意。
在其他語言中我可能會傳遞一個IList
或某些共享對象,它們都繼承...
我需要通過我的方法數組枚舉。
人們通常在目標c中做到這一點的方式是什麼?
以NSArray
。 NSMutableArray
來自NSArray
,所以只要您只使用NSArray
成員(例如只讀枚舉),您就會安全無虞。
相關文件(從蘋果公司的開發者網站):
使用NSArray*
- 從它NSMutableArray
繼承,你可以遍歷都好像他們是NSArray
秒。
由於NSMutableArray
是NSArray
的子類,只需要您的方法採用NSArray
參數。這樣,它將採取任何或者是NSArray
的子類。
我會堅持使用NSArray作爲參數,因爲我寧願儘可能使用不可變對象(鬆散耦合),然後在需要時使用-mutableCopy
方法將它們發送給需要修改數組的函數。
事實上,這就是我會做的事實上 –
這是一個叫做Liskov替代原則的實際東西 - 任何你可以使用類型的地方,你都應該能夠使用它的一個子類型。因此,任何採用NSObject的函數(比如'retain'和'release'方法)都可以採用NSString,採用NSString的函數可以採用NSMutableString,等等。實際上,您使用的NSArrays是*從不* NSArray的直接實例 - 它們實際上是一個私有子類的實例,並且由於替換原則它「工作正常」。 – Chuck