확실히 수 메모리 누수가 발생합니다. 재사용에주의를 기울여야합니다. NSString 객체의 실제 구현에 대해 많이 알 필요가있어서 "안전한지"여부를 결정해야합니다. 따라서 가비지 수집을 사용하지 않는 경우 안전을 위해 변수를 재사용해서는 안됩니다.
는 예를 들어, 완전히 안전한 :
NSString *result = @"example";
result = [result stringByAppendingString:@" test"];
초기 문자열 실제로 목표 -C 문자열 상수 때문에. 이 그러나, 메모리 누수가 발생할 것이다 : 그러니까 기본적으로
NSString *result = [NSString stringWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
그렇게하지 않으면 : 당신이 처음에 결과를 소유 한 적이 있기 때문에
NSString *result = [[NSString alloc] initWithUTF8String:argv[0]];
result = [result stringByAppendingString:@" something more"];
이, 그러나 안전 할 것 개체를 소유하고 있거나 가비지 수집을 사용하도록 설정 한 경우 안전합니다. 그러나 원래 개체를 소유하고 있고이 작업을 수행하면 메모리가 누수됩니다. 당신은 자신의 객체하지 않는, retain
, init
, copy
, mutableCopy
로 문의하거나 initWithSomething
방법 중 하나를 사용하지 않는 경우 : 제이슨의 대답에의 차임