2014-01-09 3 views
2

설정자의 ARC에서 여전히 필요한 이전 값과 새 값을 비교하고 있습니까? 나는 언제 어디서 (나는 그것이 다른 스택 오버플로 질문이라고 생각한다) 기억이 안납니다. 더 이상 필요 없다고 읽었습니다.ARC 아래에 속성 설정 기의 형식에 대한 공식 문서가 있습니까?

- (void)setProperty:(PropertyType)property 
{ 
    if (_property != property) { 
     _property = property; 
    } 
    // Other code 
} 

어디에서 내가이 문서에 대한 공식 문서를 찾을 수 있습니까?

+0

, 나는 것을 확인 어떤 사과 문서에 액세스 할 수 있도록하려면이 그 조건을 필요로하지 않습니다. 나는 당신의 대답을 믿지 않는다고 느끼기를 원치 않습니다. 이것은 단지 나의 회사 문서를위한 것일뿐입니다. 나는 이런 종류의 출처가 필요합니다. ( –

+0

이것은 부동산에 대한 세터입니까? 아니면 코드에 표시된 것보다 더 많은 것을 할 필요가 있습니까? – rmaddy

+0

네, 그 이상입니다. 나는 코드에 넣을 것입니다 =) 그것을 알아 줘서 고마워요. –

답변

1

목표 - C 객체에 대한 포인터가 PropertyType입니다 가정, 당신은 항상 이런 식으로, 어떤 검사와 ​​세터를 작성했습니다 수 :

- (void)setProperty:(PropertyType)newValue { 
    [newValue retain]; 
    PropertyType oldValue = _property; 
    _property = newValue; 
    [oldValue release]; 
} 

ARC는 정확히 같은 강력한 할당을 구현합니다. 인용 부호 Objective-C Automatic Reference Counting from the clang documentation :

__strong 개체의 경우 새 pointee가 먼저 유지됩니다. 둘째로, lvalue는 원시적 인 의미론으로로드됩니다. 셋째, 새로운 pointee는 원시 의미론을 사용하여 lvalue에 저장됩니다. 마지막으로, 뾰족한 앞머리가 풀립니다. 이것은 원자 적으로 수행되지 않습니다. 동시로드 및 저장에 대비하여 외부 동기화를 사용해야합니다.

은 따라서 우리는 다음 사항을 추론 할 수 ARC에서, 간단한 할당없이 검사와 속성 setter를 구현할 수 있습니다 기본적으로

- (void)setProperty:(PropertyType)newValue { 
    _property = newValue; 
} 
3
- (void)setProperty:(PropertyType)property 
{ 
    _property = property; 
} 

이것은 ARC의 설정 도구로 충분합니다.

+0

조건이 필요 없다는 내용의 문서를 알고 있습니까? –

+0

설명서를 찾지 못했습니다. 그러나 ARC는 해당 속성 할당과 관련된 메모리와 관련된 모든 것을 처리 할 수 ​​있습니다. – danielM

+0

아마도 ARC 이전의 XCode 이전 버전에서 'if'문이 사용 된 이유를 알 수 있습니다. 이유가 더 이상 필요하지 않은 이유를 알아야합니다 =) –