为什么我允许在Objective-C的头文件中未声明的实现中编写和使用方法?

Hal*_*900 3 objective-c

@interface SomeClass : NSObject
{
}
@end

@implementation SomeClass
-(void) awesomeMethod600
{
}
@end
Run Code Online (Sandbox Code Playgroud)

没有错误,awesomeMethod600工作.

Ale*_*ski 7

类接口中的方法声明适用于编译器(以禁止警告),因为Objective-C中的方法查找是在运行时完成的,而不是编译时.

  • 编译器将检查您调用的方法是否在它知道的任何类接口中声明.如果它找不到它们会发出警告,但这不一定是错误,因为该方法调用的实际查找是在运行时由Objective-C运行时完成的,并且该方法实际上可能不会在编译时到位time(您可以使用Objective-C运行时方法执行某些操作,例如在运行时向类动态添加方法). (2认同)