在 Objective-C 中,以下代码编译时没有警告:
id obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);
虽然以下代码编译时带有指针分配警告:
NSObject *obj = [[NSObject alloc] init];
NSString *str = obj;
NSLog(@"%@", str);
由于 Cocoa 开发人员的常见做法是让大多数init和 factory 方法返回一个id,因此很容易出现前一种情况:
Mammal *animal = [Crocodile animalWithName:@"Croc"]; // Method animalWithName returns id.
对于现实世界的场景,我可以参考 Cocos2D for iOS:
CCFiniteTimeAction *walkAction = [CCRepeatForever actionWithAction: action]; // Method actionWithAction returns id.
我同意 CCRepeatForever 听起来不像 CCFiniteTimeAction(相反,它是 CCAction 的直接子类),但如果能从编译器那里得到一些帮助会很好。在这些情况下,程序员有没有办法让 Xcode 生成警告?