gpt4 book ai didi

iphone - 对象的 NSArray 和 Casting

转载 作者:可可西里 更新时间:2023-11-01 03:02:38 25 4
gpt4 key购买 nike

我有一个类A拥有属性(property)NSString *name .如果有 NSArray并添加许多 A对象到这个数组中,每次我检索一个对象时都需要强制转换吗?即

NSString* n = (NSString*)[arr objectAtIndex:1];

或者是否有另一种方法可以像在 java 中那样使用 ArrayList<A> arr

最佳答案

NSArray 不存储有关其中包含的对象类型的信息。如果您确定知道数组中对象的类型,则可以隐式或显式执行转换:

NSString *n = [arr objectAtIndex:1];  // implicit type conversion (coercion) from id to NSString*
NSString *n = (NSString *)[arr objectAtIndex:1]; // explicit cast

隐式和显式转换在运行时成本上没有区别,只是风格问题。如果类型错误,那么很可能会发生可怕的 unrecognized selector sent to instance 0x12345678 异常。

如果你有不同类型对象的异构数组,你需要使用isKindOfClass:方法来测试对象的类:

id obj = [arr objectAtIndex:1];
if ([obj isKindOfClass:[NSString class] ])
{
// It's an NSString, do something with it...
NSString *str = obj;
...
}

关于iphone - 对象的 NSArray 和 Casting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com