2010-07-19 6 views
1

의 외출 내가 속성으로 선언하고 할당되는 볼에 초기화있는 NSString 아래와 같이 부하를했다가 있는 viewDidLoad에 지금은 어딘가에 내 코드에서 내가인스턴스 변수 범위

012을 사용하고

self.textWithKey=[[NSString alloc]init]; 
    [email protected]""; 

self.textWithKey=[self.textWithKey stringByAppendingString:text1]; 

다른 값을 반환하는 다른 메서드가 호출 될 때까지 제대로 작동합니다. 그리고이 perticularline이 다시 호출되지만 디버거가 범위 밖의 textWithKey를 보여줍니다. textWihKey를 공개하지 않았습니다.

+0

우선'self.textWithKey = [[NSString alloc] init];'다음 행 때문에 라인이 완전히 필요 없다 ... 문제에 관해서 - "다른 메소드"코드를 게시 할 수 있습니까? 또한'textWithKey'를 사용하는 모든 장소를 살펴보고 그 행을 게시하는 데 도움이 될 것입니다. –

답변

0

네, 맞습니다. 너는 그것을 풀지 않았다. 그러나 당신은 또한 그것을 할당하지 않았습니다. ;-) 처음에 당신은 self.textWithKey = [[NSString alloc] init]라고 불렀습니다. self.textWithKey = @""으로 전화하십시오. 속성에 setter를 사용하기 때문에 이전에 할당 된 값이 매번 해제됩니다. 다음보십시오 :

self.textWithKey = [[NSString alloc] initWithString:@""]; 

self.textWithKey = @""; 

때문에하는

self.textWithKey = [NSString stringWithString:@""]; 

과 동일합니다 그리고 거기 당신은 아무것도를 할당하지 않습니다. ;-)

+0

그건 사실이 아니야. '@ ""단축키와'[NSString string ...]'버전은 이미 할당 된 자동으로 릴리즈 된 객체를 반환합니다. autoreleased이기 때문에 명시 적으로 배포 할 필요가 없습니다. –

+0

실제로 그랬습니다. 나는 당신의 코드를 시험해 보았고 그것은 나에게 잘 작동합니다. 감사합니다. –

+0

맞아요, 댄 레이예요. 나는 그것이 잘못된 길로 말했다. 메모리를 할당해야합니다. 그러나 당신은 손으로 그것을하지 않으며 autoreleased 문자열을 다시 얻을. 당신 말이 맞아요. –

0

범위를 벗어나는 변수는 해제되는 것과 다릅니다.