一种同时采用NSArray和NSMutableArray的方法

Mel*_*Mel 2 cocoa cocoa-touch objective-c

我想创建一个可以接受一个NSMutableArray或一个NSArray对象的方法.

我想我可以只使用(ID)作为参数类型...或转换NSArrayNSMutableArray通过之前.但是我对这些解决方案并不满意.

在其他语言中,我可能传递一个IList或它们都继承自的共享对象......

我需要在我的方法中枚举数组.

在目标c中人们通常会这样做的方式是什么?

Joh*_*udy 16

NSArray.NSMutableArray源自NSArray,所以只要你只使用NSArray成员(例如只读枚举),你就会安全.

相关文档(来自Apple开发者网站):

  • 这是一个名为Liskov替换原则的实际事物 - 任何你可以使用类型的地方,你应该能够使用它的一个子类型.所以任何采用NSObject的函数(例如`retain`和`release`方法)都可以使用NSString,采用NSString的函数可以采用NSMutableString,依此类推.实际上,您使用的NSArrays是*never*NSArray的直接实例 - 它们实际上是私有子类的实例,并且由于替换原则它"正常工作". (4认同)

Mat*_*all 5

既然NSMutableArray是子类NSArray,只需让你的方法取一个NSArray参数.这样,它将采取任何或是子类的NSArray.