2009-12-23 22 views
2

我想創建一個方法,該方法可以採用NSMutableArrayNSArray對象。一種同時採用NSArray和NSMutableArray的方法

我想我可以只使用(id)作爲參數類型...或在通過之前將NSArray轉換爲NSMutableArray。不過,我對這些解決方案並不滿意。

在其他語言中我可能會傳遞一個IList或某些共享對象,它們都繼承...

我需要通過我的方法數組枚舉。

人們通常在目標c中做到這一點的方式是什麼?

回答

16

NSArrayNSMutableArray來自NSArray,所以只要您只使用NSArray成員(例如只讀枚舉),您就會安全無虞。

相關文件(從蘋果公司的開發者網站):

+0

事實上,這就是我會做的事實上 –

+4

這是一個叫做Liskov替代原則的實際東西 - 任何你可以使用類型的地方,你都應該能夠使用它的一個子類型。因此,任何採用NSObject的函數(比如'retain'和'release'方法)都可以採用NSString,採用NSString的函數可以採用NSMutableString,等等。實際上,您使用的NSArrays是*從不* NSArray的直接實例 - 它們實際上是一個私有子類的實例,並且由於替換原則它「工作正常」。 – Chuck

2

使用NSArray* - 從它NSMutableArray繼承,你可以遍歷都好像他們是NSArray秒。

5

由於NSMutableArrayNSArray的子類,只需要您的方法採用NSArray參數。這樣,它將採取任何或者是NSArray的子類。

1

我會堅持使用NSArray作爲參數,因爲我寧願儘可能使用不可變對象(鬆散耦合),然後在需要時使用-mutableCopy方法將它們發送給需要修改數組的函數。