2014-06-20 4 views
0

변경할 수있는 인터페이스의 속성을 선언 할 때 항상 (비 원자 복사) 만들어야합니까? 또한 언제 retain 대신 assign을 사용합니까?Objective-C 가변 속성, 복사 유지 등?

+1

iOS4 이전 버전을 개발 중이고 자동 참조 횟수를 사용할 수없는 경우. 그것은 귀하의 상황에 해당합니까? 할당은 기본 유형 (BOOL, NSInteger) 또는 소유하지 않은 객체 포인터에 대한 것입니다. Retain은 메모리에 오브젝트 w 포인터를 저장하는 것입니다. 복사는 별도의 사본을 작성하므로 원본을 그대로 둘 수 있습니다. 오래된 코드를 사용하지 않는다면 ARC와보다 현대적인 예제를 살펴 봐야합니다. 궁금하신 분은 http://stackoverflow.com/questions/2255861/property-and-retain-assign-copy-nonatomic-in-objective-c?rq=1 – mc01

답변

1

스레드 안전보다 성능이 더 중요 할 때 nonatomic을 사용하십시오. 원자 속성은 스레드로부터 안전하지만 느립니다. 기본 동작은 atomic입니다.

copy을 사용하면 새 값이 속성에 설정 될 때마다 복사본을 만들 수 있습니다. 대부분의 경우 copy은 실제로 개체의 복사본을 만들지 않으므로 성능에 미치는 영향은 없지만 누군가가 변경 가능한 복사본을 제공하면 버그를 해결할 수 있습니다 (예 : NSString 속성이 있고 다른 사람이 NSMutableString을 할당 함).

retain 또는 ARC가 꺼져있을 때에 만 필요한 이들과 같은 strong 사용하지 마십시오, 당신은 항상 ARC가 켜져 있어야합니다. strongretain가 동일하고, 이것은 ARC가 활성화 된 상태. 그냥 켜 ARC의 기본 동작입니다 역 호환 코드를 제외하고이 코드를 무시하고 무시하십시오.

예를 들어 retain 또는를 사용하는 대리인 속성은 메모리 누수가 발생합니다. 이 경우에는 weak 또는 assign을 사용해야합니다. 일반적으로 weak을 사용해야합니다. assign에는 드문 케이스 버그가있을 수 있습니다.

+0

더 이상 보관하지 않는 이유는 무엇입니까? –

+1

@Savagewood 미안해. 나는 반품을 명중하고 그것을 써서 반쯤 대답했다. Retain은 현대 프로젝트의 기본 동작이며 이전 프로젝트에서만 필요합니다. 어떤 사람들은 여전히 ​​그것을 습관에서 사용하지만 요즘은 그것을 사용하지 않습니다. ARC를 켜십시오. –

+0

참으로 대리인을 수행하거나 다른 사람이 소유 한 객체를 가리킬 때 주를 사용하거나 할당합니까? –