2010-08-11 1 views
0

I있는 NSString 인터페이스 부분에 선언 있습니다있는 NSString과 retainCount 질문

@property (비 원자, 유지)는 NSString * 파일 경로를;

이 값을 제공하고 내 사용자 지정 메서드 중 하나에서 호출하려고 할 때 그것은 처음에는 작동하지만 두 번째로는 작동하지 않습니다. 필자의 의견으로는 filePath가 첫 번째 호출 중에 자동으로 리 레이스 (autoreleased)되었다.

내가 내 방법이 같은 짓을 한 다른 접근을 시도 :

있는 NSString * 경로 = [[[있는 NSString 초기화] ALLOC] 오토 릴리즈] 경로 = [파일 경로 복사];

이 시간이 효과가있는 것 같습니다. 그러나 경로의 retainCount를 확인할 때 계속 증가하고 있습니다. 메서드가 처음 호출 될 때 retainCount는 4이지만 두 번째는 2이고 세 번째는 3입니다.

[file]이 (가) 커지기 때문에 filePath가 증가하는 것을 알았지 만 경로 변수가 왜 그렇게 되었습니까? 왜 첫 번째 경우에는 작동하지 않았습니까?

답변

0

모든 코드를 표시하지 않으므로 결정적인 결과를 내기가 어렵습니다. 그러나 :

NSString *path = [[[NSString init] alloc] autorelease]; 
path = [filePath copy]; 

가 이해되지 않는다 : 먼저있는 NSString을 할당하고 그것에 path 점을하자. 그런 다음 경로가 다른 것을 가리 키도록합니다. NSString은 사용되지 않지만 (autorelease에 의해 정리 될 것입니다).

나는 getter/setter를 통해서가 아니라 filePath이라는 이름으로 액세스합니다. 그런 다음 유지

self.filePath = [NSString stringWithFormat:@"..."]; // or any other string 

같은 self.filePath를 사용하는 경우/해제 사업은 세터가 제대로 처리됩니다. 정확히 말하자면 filePath = ...self.filePath = ...의 차이점은 후자의 이 할당하려는 객체를 유지한다는 것입니다.

코코아 후드에서 어떤 일이 벌어지고 있는지 잘 모르는 경우에는 retainCount를보고 디버깅을해야합니다.

+0

답장을 보내 주셔서 감사합니다. 가능한 한 잘 배우려고합니다. 나는 다음과 같은 상황에 처해있다. > NSDateFormatter * date_formater = [[NSDateFormatter alloc] init]; [date_formater setDateFormat : @ "yyyy-MM-dd"]; NSLog (@ "데이터 개수 : % i", [self.data retainCount]); self.data = [date_formater stringFromDate : [NSDate date]]; [date_formater release]; NSLog (@ "데이터 개수 : % i", [self.data retainCount]); 이유 : > 데이터 개수 : 0 데이터 개수 : 2 미리 알아 두십시오. – CristiC

+0

이것은 실제로 새로운 질문이며, 원래의 질문에 병합 될 때 하나의 질문으로 처리되어야하지만, 대답은 'self.data'는 유지 된 속성이므로 할당시 유지된다는 것입니다. [date_formatter stringFromDate : ...]'는 보유 개수가 1 인 문자열을 반환하므로 총 길이는 2입니다.(함수가 완료되면 stringFromDate가 autorelease 풀에이를 추가했기 때문에 다시 1이됩니다) – mvds