クラス「ABC」と、そのクラスの非自動解放オブジェクトを返すそのメソッドがあります。
@interface ABC:NSObject
+(ABC *)aClassMethodReturnsObjectWhichNotAutoreleased;
@end
@implementation ABC
+(ABC *)aClassMethodReturnsObjectWhichNotAutoreleased{
ABC *a = [[ABC alloc]init];
return a;
}
@end
プロトコル Foo がある場合。
@Protocol Foo
@required
-(void)abc;
@end
私の ABC クラスは、Foo プロトコルを「確認していません」。
最初の呼び出し
id<Foo> obj = [ABC aClassMethodReturnsObjectWhichNotAutoreleased]; //show warning
「互換性のないポインター..」という警告が表示されます.AbcはプロトコルFooを確認しませんでした
しかし、2回目の呼び出し
id<Foo> obj = [NSArray arrayWithObjects:@"abc",@"def",nil]; // It will "not" show warning as it will return autorelease object.NSArray don't confirm protocol Foo
最初の呼び出しコンパイラでは警告が表示され、2 回目の呼び出しではコンパイラは警告を表示しません。これは、autorelease オブジェクトを返していないためだと思います。
NSArray も FOO を確認していないため、コンパイラが 2 回目の呼び出しで警告を出さないのはなぜですか?