2013-04-20 31 views
0

比方說,我有一個具有一些屬性的對象,並將這些對象的1000個加載到一個數組中。接下來,我進行了一系列的valueForKeyPaths對這些屬性:對多個keyPath執行valueForKeyPaths

result.property1 = [array valueForKeyPath:@"@sum.property1"]; 
result.property2 = [array valueForKeyPath:@"@sum.property2"]; 
result.property3 = [array valueForKeyPath:@"@sum.property3"]; 
etc... 

總結這些特性單獨看起來很低效。除了快速枚舉屬性並手動求和它們之外,還有更好的方法嗎?即

for(Foo* foo in array) { 
    result.property1 += foo.property1; 
    result.property2 += foo.property2; 
    result.property3 += foo.property3; 
} 
+0

「似乎」一詞與我有關。不要對任何一種方法的性能特徵做出假設(或者關於這段代碼對你的程序性能有多重要)。如果它擔心你,請將其歸檔。 – 2013-04-20 02:21:18

回答

0
KVC

需要鍵是字符串:

的關鍵是識別對象的特定屬性的字符串。通常,鍵對應於接收對象中的訪問器方法或實例變量的名稱。密鑰必須使用ASCII編碼,以小寫字母開頭,並且不得包含空格。

所以我所知道的答案很遺憾,你不能用valueForKeyPath:來做到這一點,你將不得不手動做它或枚舉它。