我有一个类“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
但是第二次调用
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
在第一次调用编译器发出警告,在第二次调用编译器没有发出任何警告。我认为这是因为我没有返回自动释放对象。
为什么编译器在第二次调用中没有发出警告,因为 NSArray 也没有确认 FOO 提前谢谢