我可以定义一个具有属性的类来从课堂外访问我的ivars。是否可以使用课堂外的直接ivar访问来提高效率?
我也可以使用myInst-> ivar语法以C结构方式访问。
在C++中,我将使用访问器,但是在objective-c中,有些情况下我可能需要直接访问。消息传递系统会在访问器的性能方面产生很大的影响,这在某些情况下很重要,因为消息不像使用C++方法那样内联。
例如在一个具有名为标量和其上定义的属性的类的实例中。标是一个简单的浮点值:
-(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标]到myinst->标量,该方法将运行速度快了很多,因为使用电话与访问会占用在这最CPU的循环。
与C++一样,我明白直接ivar访问一般是不鼓励的,但在这种情况下,速度问题时,它可以接受吗?如果没有,是否还有一种更优先的方法仍然使用Objective-C类?
通常您会直接在C或C++中执行性能密集型部件。 – 2012-02-19 23:44:46
您使用访问器时看到的性能影响有多大?你是否已经量化了“巨大的性能打击”以及直接访问伊娃的速度要快多少,还是这种先发制人的假设? – 2012-02-20 00:03:50
@GeorgFritzsche是的,我通常这样做,但是当我想要在一个类接口中进行多态性,NSCoding和引用计数时弹出,而不是将它分解为structs/C++类和obj-c类。 – 2012-02-20 00:04:12