2012-07-20 7 views
3

가능한 중복 강하고 약한 참조를 사용하는 방법 :
Weak and strong property setter attributes in Objective-C때 IOS 5

내가 아이폰 개발 새로운 오전입니다. 어느 누구도 강하고 언제 약한 참조를 사용해야하는지, 그리고 원자와 비 원자 사이의 차이점을 말해 줄 수 있습니까? 나는 많은 링크를 통과했지만 여전히 명확하지 않다. 또한 ios5 이전에 사용 된 retain, copy 및 assign 간의 차이점을 알고 싶었습니다. 어떤 도움에 감사드립니다

..

감사합니다, 주권

답변

13

데이터를 설계 당신은 소유권의 개념을 이해할 필요가있다. 데이터는 아래쪽으로 소유하고 있습니다. 소유권은 절대 데이터 계층을 백업 할 수 없습니다. A가 B와 B에서 C에 포인터를 가지고 있고 C가 A를 소유하고 있다면 C가 간접적으로 C를 참조하고 A를 참조하여 메모리 누수가 발생하는 순환 참조 그래프가 생깁니다. C가 여전히 참조를 가지고 있기 때문에 삭제됩니다. A가 수행하지 않으면 삭제되지 않습니다. - 어쨌든 22

이와 같은 시나리오를 피하려면 강력한 포인터를 사용하여 데이터를 "아래로"가리키고 약한 포인터를 사용하십시오. 모든 후위 참조 (예 : 부모 포인터).

속성이 원자 단위 인 경우 여러 스레드에서 설정할 수있는 설정자를 생성합니다. 한 스레드가 다른 스레드와 동시에 속성을 변경하는 경쟁 조건을 가질 수 없습니다. 비 원자 속성에는 스레드 잠금 시스템이 없습니다.

마지막으로 개체의 [myObject retain]을 호출하여 retain 속성을 사용하면 개체의 참조 횟수가 늘어납니다. 복사는 [myObject copy]이므로 속성은 원본을 참조하지 않지만 사본 및 할당은 참조 횟수 조정없이 곧바로 할당됩니다.