[英]ios custom NSObject casting
如果我有一个名为Human的自定义NSObject,它有一个名为Male的子类,并且我有一个名为human的数组,其中包含Human对象。 当遍历人员数组时,可以将对象转换为:
for (Human *human in humans) {
Male *male = (Male *)human;
}
还是创建诸如initWithMale的方法更好,例如
for (Human *human in humans) {
Male *male = [[Male alloc] initWithMale:(Male *)human];
}
从内存管理的角度来看,最好的方法是什么? 如果是后者,那么我将如何在initWithMale方法中进行管理?
谢谢
这取决于您要完成的工作。 如果人员数组中的对象是人员的直接实例,则您不能将它们强制转换为人员的任何子类,因为它们不是该类型的对象。 如果这种情况是正确的,并且您尝试将Human转换为Male,那么您将需要在Male类中创建一个init方法,该方法可以使用提供的Human来初始化新对象:
Male *male = [[Male alloc] initWithHuman: human];
使用这种方法,您的initWithHuman方法要么需要保留传入的Human实例并引用其值,要么复制任何必要的数据。 可以将后面的方法添加到Human类本身,这将允许您使用initWithHuman方法初始化任何子类(实质上是创建基本的复制函数)。
如果humans数组包含Human的子类,则可以将它们强制转换为正确的实例,但是,应首先检查它们是否为该实例。 这是一个例子:
for (Human *human in humans) {
if ([human isKindOfClass:[Male class]]) {
Male *male = (Male *) human;
}
}
您不需要强制转换id类型的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.