Programing

ARC 아래의 NSString 속성은 강력해야합니까 아니면 복사해야합니까?

lottogame 2020. 12. 8. 07:39
반응형

ARC 아래의 NSString 속성은 강력해야합니까 아니면 복사해야합니까?


ARC로 컴파일하지 않을 때는 .NET과 copy같은 데이터 유형에 대한 속성 을 사용하는 것이 좋습니다 NSString. copyARC 모드에서 의 사용에 대한 적절한 문서를 찾을 수 없습니다 . 누군가 ARC에 적용 할 수있는 사항을 말해 줄 수 있습니까?


변경 가능한 문자열을 전달하고 모르는 사이에 변경하는 것을 피하고 싶기 때문에 여전히 복사하는 것이 좋습니다. 사본은 보유한 문자열이 변경되지 않음을 보장합니다.


복사와 ARC는 직각입니다. 변경 가능한 객체를 복사하여 상태를 "고정"합니다. ARC는 객체의 참조 횟수를 추적합니다.

NSString객체는 변경 가능할 수도 있고 아닐 수도 있습니다. NSString*매개 변수로 를 수신 할 때 유형을 확인하지 않는 한 변경 불가능하다는 것을 확신 할 수 없습니다 (그런데도 거짓 긍정이 발생할 수 있습니다). 알고리즘이 설정된 후 변경되지 않는 문자열에 의존하는 경우 복사본을 만드는 것이 올바른 방법입니다. 반면에 ARC는 강력한 참조를 유지하는 동안 개체가 해제되지 않도록합니다.


copy로 계산됩니다 strong. 사용하다:

@property (nonatomic, copy) NSString * name;

https://devforums.apple.com/message/654033#654033

또는:

@property NSString * firstName;

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW7


ARC를 사용하는지 또는 ARC를 사용하는지는 중요하지 않습니다 .

그 이유 copy는 클래스의 내부 상태가 구현 외부에서 수정 될 수 없도록 보장하기위한 것입니다.

누군가가 NSMutableString를 전달한 다음 나중에 수정 하는 경우 발생할 수 있습니다. 이 고려 사항은 메모리 관리 환경과 무관합니다.

참고 URL : https://stackoverflow.com/questions/11249656/should-an-nsstring-property-under-arc-be-strong-or-copy

반응형