我可以定義一個具有屬性的類來從課堂外訪問我的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