ary*_*axt 5 cocoa subclass objective-c nsarray class-cluster
我正在尝试子类化NSArray,但它在尝试访问count方法时崩溃了应用程序.我知道这NSArray是一个 类集群.
我知道我可以简单地子类化NSObject并将我的数组作为实例变量,但我宁愿继承子类NSArray.
编辑:
理由:我创建一个纸牌游戏,我有一个类Deck应该继承NSMutableArray有一些额外的方法(-shuffle,-removeObjects:,-renew等),我认为它会寻找更清洁的子类NSArray,而不是一个变种.
Rya*_*yan 17
在类这样的类上添加类别的问题是该类的所有实例都将继承其他方法.这既不必要(因为不是每个阵列都需要能够被洗牌等)而且很危险(因为你不能从类型检查中受益,以确保你当前所指的NSArray确实是一个预计会被洗牌的人).
另一种方法是创建自己的Deck类,它具有NSMutableArray作为实例变量.在那里,您可以完全按照自己的意愿在甲板上定义操作,并且您使用NSMutableArray的事实将成为实现细节.这使您可以在编译时利用类型检查,它允许您在不更改其客户端的情况下更改Deck类的内部实现.例如,如果您出于某种原因决定NSMutableDictionary将是更好的后备存储,那么您可以在Deck类的实现中进行所有这些更改,而无需更改任何创建和使用Deck的代码.
您通常不需要对其进行子类化,但无论如何,Apple提出的建议是:
NSArray的任何子类都必须覆盖原始实例方法
count和objectAtIndex:.这些方法必须在您为集合元素提供的后备存储上运行.对于此后备存储,您可以使用静态数组,标准NSArray对象或某些其他数据类型或机制.您还可以选择部分或完全覆盖要为其提供替代实现的任何其他NSArray方法.
你真的覆盖了count方法吗?正如他们所说,你必须提供自己的支持结构来保存数组元素,并考虑到这一点覆盖建议的方法.
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |