我可以定义一个具有属性的类,以从类外部访问我的 ivars。
我也可以只使用 myInst->ivar 语法以 C-struct 方式访问。
在 C++ 中,我会使用访问器,但在 Objective-c 中,在某些情况下我可能需要直接访问。消息传递系统对在某些上下文中很重要的访问器造成很大的性能损失,因为消息不像 C++ 方法那样内联。
例如,在一个类中,它有一个名为 scalar 的 ivar 和一个在其上定义的属性。标量是一个简单的浮点值:
-(void) doWorkWithMyClass:(MyClass*)myinst
{
// array and other locals declaration omitted
for (int i = 0; i < reallyBigX; i++) {
result += [myinst scalar] * array[i];
[myinst computeNextScalar:i];
}
}
如果我将 [myinst scalar] 更改为 myinst->scalar,该方法将运行得更快,因为在此循环中使用访问器调用会占用大部分 CPU。
与 C++ 一样,我理解通常不鼓励直接访问 ivar,但在这种情况下,当速度很重要时,它可以接受吗?如果没有,是否有更首选的方法仍然使用objective-c 类?