考虑以下代码:
if([obj isKindOfClass:[NSString class]]) {
NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"];
}
我在这里有点困惑。
if
语句检查obj
是否属于NSString
类。如果是的话,它将对象和附加字符串分配给NSString *s
,我能正确理解吗?如果是这样,为什么还要将其转换为(NSString *)
?if
语句是否已经检查过,并且不需要进行类型转换?只说一句不是很好吗?
NSString *s = obj stringByAppendingString:@"xyzzy"];
提前致谢。
最佳答案
这完全取决于obj
的定义方式。如果是id obj
,则不需要强制转换,但是如果将其定义为NSObject *obj
,则必须强制执行强制转换以禁止编译器警告stringByAppendingString:
上未定义NSObject
。不需要强制转换来使代码在运行时工作,它只告诉编译器“正确”的类型,因此可以告诉该方法是否应存在于对象上。id
不需要强制类型转换的原因是,id
表示“任何类型的对象”,而NSObject *
表示“NSObject类型的对象”。
关于objective-c - 基本的Objective-C类型转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399188/