Objective-C中id和指针类型之间的转换

时间:2013-01-24 07:58:26

标签: objective-c xcode casting cocos2d-iphone llvm

在Objective-C中,以下代码编译时没有警告:

id obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);

以下代码使用指针赋值警告进行编译:

NSObject *obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);

由于Cocoa开发人员通常会使大多数 init 和工厂方法返回 id ,因此前一种情况很容易出现:

Mammal *animal = [Crocodile animalWithName:@"Croc"]; // Method animalWithName returns id.

对于现实世界的场景,我可以参考适用于iOS的Cocos2D:

CCFiniteTimeAction *walkAction = [CCRepeatForever actionWithAction: action]; // Method actionWithAction returns id.

我同意CCRepeatForever听起来不像CCFiniteTimeAction(相反,它是CCAction的直接子类),但是从编译器获得一些帮助会很高兴。在这些情况下,程序员是否有办法让Xcode生成警告?

1 个答案:

答案 0 :(得分:0)

更改您的build settings > apple llvm compiler 4.1 -warnings

我不确定您必须做出“是”才能得到您想要的具体警告。