objective-c - 在运行时从类外部访问 Objective-C ivar

标签 objective-c c objective-c-runtime

我知道这个想法完全打破了封装,但假设我有以下类扩展:

@interface MyClass () {
    int reallyImportantIvar;
}
// ...
@end

通常,该类的行为就像它在 Objective-C 层中应该的那样——发送和接收消息等。但是有一个(“公共(public)”)子例程,我需要最好的性能和非常低的延迟,所以我会更喜欢使用 C 方法。当然,如果我这样做,我将无法再访问 reallyImportantIvar,这是我执行关键任务的关键。

看来我有两个选择:

  1. 改为将实例变量设为静态变量。
  2. 通过 Objective-C 运行时直接访问实例变量。

我的问题是:选项 2 是否可行?如果可行,它的开销是多少? (例如,我是否仍在寻找 O(n) 算法来查找类的实例变量?)

最佳答案

实际上,如果C函数的定义在@implementation内类的 block ,然后它可以通过通常的object->someIvar访问该类的私有(private)ivars符号。因此,虽然您可以使用运行时来访问它,但我认为您不需要这样做。只需在 @implementation 中实现功能即可问题类的 block ,你应该没问题。

关于objective-c - 在运行时从类外部访问 Objective-C ivar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939806/

相关文章:

iphone - 在同一个 #define 中识别 iPhone 3、4 和 5

c - 将虚拟内存映射到虚拟内存

c - 识别 Windows 中进程加载的所有模块

c - 如何在C中制作定时器?

ios - 在 objective-c 中,当对象本身被分配为它实现的委托(delegate)时,对象如何返回不同的代理对象

objective-c - View Controller 两次调用 awakeFromNib

ios - URL连接ios

Objective-C:类别中的实例变量

iOS/Objective-C 元类和类别

ios - NSString decimalValue 方法