Objective-C では、次のコードは警告なしでコンパイルされます。
id obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);
次のコードは、ポインター割り当ての警告でコンパイルされます。
NSObject *obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);
ほとんどのinitおよび factory メソッドがidを返すようにすることは、Cocoa 開発者の間で非常に一般的な方法であるため、前者のシナリオは非常に簡単に発生します。
Mammal *animal = [Crocodile animalWithName:@"Croc"]; // Method animalWithName returns id.
実際のシナリオについては、iOS 用の Cocos2D を参照できます。
CCFiniteTimeAction *walkAction = [CCRepeatForever actionWithAction: action]; // Method actionWithAction returns id.
CCRepeatForever が CCFiniteTimeAction のようには聞こえない (代わりに、CCAction の直接のサブクラスである) ことに同意しますが、コンパイラの助けがあればうれしいです。これらの場合、プログラマーが Xcode に警告を生成させる方法はありますか?