基本Objective-C类型转换问题

时间:2011-06-18 22:08:17

标签: objective-c ios casting nsstring

请考虑以下代码:

if([obj isKindOfClass:[NSString class]])  {
   NSString *s = [(NSString *)obj stringByAppendingString:@"xyzzy"];
}
我在这里有点困惑。 if语句检查obj是否属于NSString类。如果是,它会将对象和附加字符串分配给NSString *s,我是否正确理解了这一点?如果是这样,为什么还要把它投到(NSString *)if语句是否已经检查过,并且不会使类型转换不必要?

只是说:

,这不是完全可以的

NSString *s = obj stringByAppendingString:@"xyzzy"];

提前致谢。

1 个答案:

答案 0 :(得分:3)

这完全取决于obj的定义方式。如果是id obj则不需要强制转换,但如果它被定义为NSObject *obj,那么必须使用强制转换 来禁止编译器警告stringByAppendingString:未定义在NSObject。不需要强制转换使代码在运行时工作,它只告诉编译器“正确”类型,以便它可以判断方法是否应存在于对象上。

id不需要强制转换的原因是id表示“任何类型的对象”,而NSObject *表示“NSObject类型的对象”