2010-08-09 4 views
1

NSString에 대한 간단한 질문으로 substringToIndex 또는 상수 문자열 @ "0.00"에 의해 값이 할당 된 문자열에 따라 문자열에 값을 할당하는 코드 조각이 있습니다. 그것은 새로운 값을 유지 & 이전 값을 해제하기 때문에 할당에 대한NSString 할당 및 보유

// Save if value found, otherwise set to 0.00 
if (parsedCharacters == nil || [parsedCharacters isEqualToString:@""]) 
     self.currentDiscountedPrice = @"0.00"; 
else 
{ 
    // Truncate extra digits from string to 2 decimal places (find full stop, save 2 places after it) 
    NSRange fullStopRange = [parsedCharacters rangeOfString:@"."]; 
    self.currentDiscountedPrice = [parsedCharacters substringToIndex:(fullStopRange.location + 3)]; 
} 

를 사용하는 괜찮습니다?

이전 반복에서 var에 상수 문자열 또는 substringToIndex 반환 값이 할당되었는지 여부를 알 수있는 방법이 없지만 일정 문자열에서 release & 릴리스를 호출하는 것이 무해하다고 말했습니까?

+0

기본적으로 위의 코드에서 오히려 명시 적으로 이전 값을 해제하고 substringToIndex 값을 유지해야하며 그렇지 않으면 self.currentDiscountedPrice =를 두 할당에 사용할 수 있습니까? –

+0

OT : 대신에'parsedCharacters == nil || [parsedCharacters isEqualToString : @ ""]','parsedCharacters.length == 0'이라고 쓰고 싶습니다. Objective-C의 message-to-nil 의미론으로 인해, 이것은 'nil'을 탐지 할 것이고, 그것은 non-nil에 대해 조금 더 빨라질 것이며 물론 더 간단 할 것입니다. –

답변

1

NSString은 특별하지 않습니다. 모든 코코아 개체는 the Cocoa memory-management rules을 따릅니다. 네가하는 한, 너는 괜찮을거야.

나는 상수 문자열에 대한 릴리스 & 릴리스를 무해하다고 말했지만, 사실입니까?

예. 자신이 소유하지 않은 다른 문자열과 동일하게 취급해야합니다. 소유하고 싶거나 사본을 만들고 소유하려는 경우 보관하십시오. 당신이 소유 한 것을 공개해야합니다.

... 차라리 명시 적으로 이전 값 & substringToIndex 값 또는 괜찮 단지 모두 할당에 대한 self.currentDiscountedPrice =를 사용하려면 유지를 해제해야?

init 개의 방법과 dealloc의 모든 속성을 사용해야합니다. 이것들은 명시 적으로 retainrelease 메시지를 인스턴스 변수의 객체에 보내야하는 유일한 방법입니다.

해당 단락의 양측에 대한 이유는 사용자 또는 하위 클래스가 속성에 대한 사용자 지정 액세서를 구현할 수 있기 때문입니다. 사용자 정의 동작은 하프 인티 드 또는 반 분리 오브젝트에서 실행하는 것이 위험 할 수 있지만 그 밖의 모든 곳에서 필요할 수 있습니다.

상수 문자열 객체를 속성 설정자에게 전달하는 데 아무런 해가 없습니다. 개체를 정상적으로 유지하거나 복사합니다.

속성의 값 (있는 NSString가 인 NSMutableString을 가지고로), 당신은 당신이하지 않는 것을 위해 값 ( @property(copy) 또는 @property(nonatomic, copy))를 복사으로 속성을 선언해야 변경 가능한 변형을 가진 클래스의 목적은 그 주에

다른 누군가의 변경 가능한 객체에 대한 공동 소유권을가집니다. 객체를 변경하면 특히 인스턴스 변수 대신 해싱 컬렉션 (예 : 사전 키)에 객체를 저장 한 경우 문제가 발생할 수 있습니다.

+0

피터 감사합니다. –