2011-08-18 3 views
1

NSStrings을 보존하고 합성해야하는지 여부에 대해 다소 혼란 스럽습니다. 인스턴스 변수로 NSString 값이 있고 유지 및 합성 오전. 실제로 alloc 언제든지 전화 아니에요NSString을 유지하고 합성해야합니까?

self.value = @"VALUE"; 
.... 
self.value = @"DIFFERENT_VALUE"; 

:하지만 같은 그것을 다른 값을 할당하고있다. 이 변수를 유지하고 합성해야합니까?

답변

3

실제 문자열은 고정 값으로 유지되지만 실제로 자동 복사 된 것으로 생각할 수 있습니다. 자동으로 복사되는 접근자를 사용하기 때문에 유지 (하지만 당신은 접근자를 표시) 그래서 당신 dealloc에서 그들을 공개해야합니다.

@synthesize,에 대한 필요성은 실제로 변수를 가져 와서 iVar에 배치하는 get/set 메서드를 만드는 것입니다. 따라서 당신이 필요로하는 것이 무엇이든간에 @synethsize 속성을 얻거나 get/methods를 직접 만드십시오 - 보통은 사용하는 것이 훨씬 낫습니다. @sythesize.

0

당신이 그들을 alloc'ed하지 않은 경우, 당신은 일반적으로 유지할 필요는 없지만, 그들은 당신의 객체의 인스턴스 변수를하는 경우, 그들은 아마 이 개체의 할당 해제의 방법에 또는 사본 정도 유지로 표시됩니다 이 오브젝트에 값이 있으면이 오브젝트를 해제해야합니다.

1

앞으로 코드 사용 방법을 어떻게 변경할지 모를 것입니다. 동적으로 생성 된 문자열을 사용하도록 코드를 변경하십시오. 규칙을 따르지 않으면 코드가 중단됩니다.

NSString의 모범 사례는 retain 대신 copy로 설정하는 것입니다. 이유는 간단합니다. 이렇게하면 끈이 발 아래에서 변경되는 것을 방지 할 수 있습니다.

자세한 내용은 NSString property: copy or retain?을 참조하십시오.

+1

나는 누가 이것을 downvoted했는지 모르겠습니다. 나는이 대답에 잘못된 것을 보지 않는다. – Chuck