2011-04-07 6 views
1

나는 내 클래스에서 NSString을 사용하고 있으며 문자열 값을 다른 클래스에 복사해야하는 경우가 있습니다. 하지만 내 질문에 어떻게 문자열을 초기화해야합니까 예를 들어 init? (값은 클래스 멤버는 다음과 같은 호출은 초기화에)NSString *을 초기화하는 방법

value = [NSString stringWithCString:inStrning encoding:NSASCIIStringEncoding]; 

또는

value = [[NSString alloc] initWithCString:inStrning encoding:NSASCIIStringEncoding]; 

의 차이가 여기에 무엇입니까? 초기화가 완료되면 첫 번째 호출에 할당 된 메모리가 해제됩니까? assign 속성으로 value을 사용하고 있습니다. copy을 사용하는 것이 더 좋습니까?

그리고 어떤 방법을 사용하여 클래스에 전달할 때 문자열 복사는 어떻게해야합니까? 예 : 그것은 기본 속성을 가지고 있으므로

-(id) initWithObjectTypeStr:(NSString*)inTypeStr 
{ 
    ... 
    objectTypeStr = [NSString stringWithString:inType]; 
    //or 
    objectTypeStr = [[NSString alloc] initWithString:inType]; 
} 

objectTypeStr은 (assign 나는 생각한다) 속성으로 정의되어 있지 않습니다.

이 경우 가장 좋은 방법은 무엇입니까?

+0

이 메모리 관리에 대한 내 블로그 게시물을 참조의 사용 후 해제하는 새를 사용하여 할당되기 때문에 당신이 개체의 소유권을 objectTypeStr = [[NSString alloc] initWithString:inType];에 -에 http : // www.makebetterthings.com/blogs/iphone/memory-management-in-objective-c-iphone/ – Saurabh

답변

1
[NSString alloc] initWithString:@""] 

소유하고있는 문자열을 돌려 주면 해제해야합니다.

[NSString stringWithString:@""] 

autoreleasepool이 해제하고 정리할 autorelease 객체를 반환합니다.

나는 memory management documentation을 읽어 보시기 바랍니다.

+0

감사합니다. Apple 가이드는 내 문제에 초점을 맞춰 읽을 때 더 읽기 쉽습니다. – dobry

1

차이점은이 경우 objectTypeStr = [NSString stringWithString:inType]; objectTypeStr이 자동 출시되며 사용자가이 객체를 소유하지 않았 음을 의미합니다.

반면에 당신이 ALLOC 정도의 책임이

관련 문제