我知道这个想法完全打破了封装,但是说我有以下类扩展:
@interface MyClass () {
int reallyImportantIvar;
}
// ...
@end
通常,该类的行为就像它应该在 Objective-C 层内一样 - 发送和接收消息等。但是有一个(“公共”)子例程我需要尽可能好的性能和非常低的延迟,所以我更喜欢使用一种 C 方法。当然,如果这样做,我将无法再访问realImportantIvar,这是我的性能关键任务的关键。
看来我有两个选择:
- 将实例变量改为静态变量。
- 通过 Objective-C 运行时直接访问实例变量。
我的问题是:选项 2 是否可能,如果可以,它的开销是多少?(例如,我是否仍在使用 O(n) 算法来查找类的实例变量?)