2012-02-29 4 views
2

NSArray *tagsArrayNSMutableDictionary *cache이 비어 있지 않습니다.로컬 변수, 최적화 및 ARC

이 :

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

:

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

이보다 느리게 안?

__strong var 'name'은 ARC에 의한 암시 적 보유/해제를 사용하지 않습니까? 컴파일러는 실제로 처음부터 두 번째를 생성 할 것인가?

+2

릴리즈 빌드에 차이가 있다면 놀랍지 만, 디버그 빌드에서는 retain/release가있을 것입니다. – dasblinkenlight

+0

예 이것들은 정확히 똑같은 것으로 컴파일 될 것입니다. – trapper

+1

* 똑같은 것으로 컴파일해야합니다. 나는 당신이 그것을 실제로 느리게 보는 것을보고 있다면 이상한 일이 벌어지고 있음을 확신합니다. – mattjgalloway

답변

1

첫 번째 예제에서 "name"변수와 상호 작용하는 다른 코드가 없으므로 ARC와 동일합니다.

앞으로 ARC가 코드를 수정하여 성능과 최적화를 개선하고 그 반대의 경우가 아니라는 것을 이해해야합니다. 알고 있어야합니다 - - 여기

는 ARC에 대한 전체 문서와 링크의 http://clang.llvm.org/docs/AutomaticReferenceCounting.html

0

ChildClass에 objecA, objecB가 .... 인스턴스 변수가있는 경우, 그리고에 ParentClass는 인스턴스 변수 인 경우 ChildClass의 인스턴스 변수를 (할당 시도 ParentClass 및 강력한 포인터),

다음 ChildClass '개체는 동일한 개체처럼 작동합니다. 그것은 같지 않지만. 확실히 동일하지 않습니다.