在本教程中:http://www.raywenderlich.com/62989/introduction-c-ios-developers-part-1
它提到了Objective-C:
即使你只在一个实现中声明了一个方法 类,并且不要在界面中公开它,技术上可以 仍在外部调用该方法。
这是怎么做到的?
答案 0 :(得分:2)
有很多方法。
例如,只要将某个兼容方法声明为某处,就可以通过动态输入正常调用它。这是一个演示:
// MyClass.h
@interface MyClass : NSObject
@end
// MyClass.m
@interface MyClass()
- (void)addObject;
@end
@implementation MyClass
- (void)addObject:(id)object {
NSLog(@"Whoa, I got called!");
}
@end
// main.m
#import <Foundation/Foundation.h>
#import "MyClass.h"
int main() {
id something = [[MyClass alloc] init];
[something addObject:@"Look ma, no errors!"];
return 0;
}
由于有一个名为addObject:
的已知方法接受一个对象,并且id
变量是动态类型的,因此这是100%有效并将调用MyClass的addObject:
方法。
他们甚至可以使用静态类型变量和通过在类别中声明方法而未知的方法来获取它。其他一些选择:
performSelector:
作为@michaels在答案中显示objc_msgSend()
答案 1 :(得分:0)
您可以使用NSObject的performSelector:
方法,但如果选择器未在任何地方公开声明,编译器会向您发出警告
[someObject performSelector:@selector(someMethod)];