2012-05-14 2 views
3

가능한 중복 :
With ARC why use @properties anymore?ARC가 Objective-C의 속성을 제거하지 않습니까?

NB : 나는 실제로 우리가 멀리 속성이 할 수 있다고 생각하지 않습니다,하지만 난 왜에 관한 추론을 이해하려고 노력 중이 야. :)

다시 this question을 보면, 우리가 사용하는 주요한 이유는 메모리 관리 문제를 피하는 것입니다. 지금이와 ARC 거래 이후

- (void) setOtherObj:(MyOtherObject *)anOtherObject { 

    if (otherObject == anOtherObject) { 
    return; 
    } 

    MyOtherObject *oldOtherObject = otherObject; // keep a reference to the old value for a second 
    otherObject = [anOtherObject retain]; // put the new value in 
    [oldOtherObject release]; // let go of the old object 
} 

, 우리가 멀리 속성이 모두 함께 바로 설정 할 수 없었 : 즉, 속성을 작성하여 우리는 이러한 유지 및 해제 방법을 알아 작성할 필요가의 자신을 제거 otherObject = anotherObject과 같은 방법으로 ivars를 할 수 있습니까?

+0

속성의 목적/역할은 무엇입니까? (인수를 위해'@property retain'을 무시하십시오.) ARC의 목적/역할은 무엇입니까? –

+0

속성은 여전히 ​​캡슐화 및 데이터 숨기기를 강화하는 데 도움이됩니다. – tronbabylove

답변

5

메모리 관리는 입니다. 속성을 사용하는 이유가 있지만 그 중 하나만 사용하는 것은 아닙니다. 자신의 클래스에서는 일반 인스턴스 변수 만 사용할 수 있지만 외부에서는 사용할 수 없습니다. 이를 위해서는 여전히 재산이 필요합니다.

등록 정보는 인스턴스 변수로 백업하지 않아도됩니다. 예를 들어 backgroundColor 속성을 실제로 반환하고 일부 개인 하위보기의 backgroundColor 속성을 설정하는보기에서 속성이있을 수 있습니다. 또는 실제로 인스턴스 변수에 해당하지 않는 읽기 전용 name 속성이 있지만 단순히 firstNamelastName을 연결한다고 가정 해보십시오.

일반 인스턴스 변수 액세스 대신 속성을 사용하면 많은 장소에서 코드를 변경하지 않고도 쉽게 지연 초기화를 구현할 수 있습니다.

메모리 관리를 처리하는 속성 만 사용하는 경우 많은 경우에 메모리 관리 기능을 사용하지 않아도되지만 속성을 사용하면 이후에 간단히 매핑하지 않아야한다고 결정할 때 더 많은 유연성이 제공됩니다. 인스턴스 변수.

2

메모리 문제를 피하는 것은 속성의 매우 유용한 부산물이었습니다. 주요 목적은 액세스 제어 (readonlyreadwrite) 및 정보 숨기기 (즉, 속성 가져 오기 및 설정에 대한 논리는 언제든지 클래스 사용자가 변경하지 않고 변경할 수 있음)입니다. 또한 copy 의미 체계가 필요하면 ARC와 함께 계속 사용할 수 있습니다.

0

ARC는 메모리 관련 문제를 관리합니다. 속성은 값을 편리하게 얻거나 설정하는 방법입니다. 따라서 ARC의 도착이 속성의 끝을 의미하지는 않습니다.

관련 문제