2012-02-29 4 views
2

Étant donné NSArray *tagsArray et NSMutableDictionary *cache non vide.variable locale, optimisation et ARC

Ce:

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

ne devrait pas être plus lent que ceci:

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

? Le __strong var 'name' n'utiliserait pas une conservation/libération implicite par ARC? Le compilateur va réellement générer le second à partir du premier?

+2

Je serais surpris s'il y avait une différence dans une version de construction, mais dans une version de débogage, la fonction de conservation/libération serait probablement là. – dasblinkenlight

+0

Oui, ceux-ci compileraient exactement la même chose – trapper

+1

* Devrait * compiler exactement la même chose, probablement. Cela ne me dérangerait pas de parier que quelque chose d'étrange se passe bien que si vous le voyez en train d'être plus lent. – mattjgalloway

Répondre

1

Oui, c'est la même chose pour ARC, car il n'y a pas d'autre code qui interagit avec la variable "name" dans le premier exemple. Pour l'avenir, essayez de comprendre que l'ARC modifie votre code pour de meilleures performances et optimisation, et non l'inverse.

est ici le lien avec documentation complète ARC - doit savoir - http://clang.llvm.org/docs/AutomaticReferenceCounting.html

0

Si ChildClass objecA, objecB .... a une variable d'instance et ParentClass tente d'assigner la variable d'instance de ChildClass (qui est une variable d'instance de ParentClass et pointeur fort),

puis l'objet ChildClass 'agit comme le même objet. Bien que ce ne soit pas pareil. Certainement pas pareil.