2012-02-29 54 views
2

鑑於NSArray *tagsArrayNSMutableDictionary *cache不爲空。局部變量,優化和ARC

此:

for (Tag *tag in tagsArray) { 
    NSString *name = tag.name; 
    [cache setObject:tag forKey:name]; 
} 

不應該比這個慢:

for (Tag *tag in tagsArray) { 
    [cache setObject:tag forKey:tag.name]; 
} 

__strong var'name'不會使用ARC的隱式保留/發佈嗎?編譯器實際上會從第一個生成第二個?

+2

如果在發佈版本中有差異,我會感到驚訝,但在調試版本中,保留/發佈可能會在那裏。 – dasblinkenlight 2012-02-29 13:52:01

+0

是的,這些會編譯成完全相同的東西 – trapper 2012-02-29 16:15:02

+1

*應該*編譯到完全相同的東西,可能。如果你看到它實際上比較慢,我不介意在那裏發生一些奇怪的事情。 – mattjgalloway 2012-03-06 12:22:32

回答

1

是的,它與ARC相同,因爲在第一個示例中沒有其他代碼與「name」變量交互作用。

爲了將來,試着瞭解ARC修改你的代碼以獲得更好的性能和優化,而不是相反。

下面是與ARC整個文檔的鏈接 - 必須知道 - http://clang.llvm.org/docs/AutomaticReferenceCounting.html

0

如果ChildClass objecA,objecB ....有一個實例變量,父類嘗試將ChildClass的實例變量(這是一個實例變量賦值父類和強指針),

然後ChildClass的對象就像同一個對象一樣。雖然不一樣。絕對不一樣。