2009-03-05 8 views
2

NSString에 문제가 있습니다.메모리 문제 NSString

NSString* str = [[NSString alloc] initWithString:@"Hello world"]; 

위의 코드에서 str 개체를 해제해야합니까? 규칙에 따라이 객체는 alloc을 사용하여 만들어 지므로 release 메소드를 사용하여 명시 적으로 릴리스해야합니다. 그러나 명시 적으로 릴리스하지 않으면 Instruments에서 메모리 누수를 찾을 수 없습니다. NSString이 NSNumber로 바뀌면 메모리 누수가 발생합니다.

누구든지 내게 어떤 제안을 줄 수 있습니까? 감사.

답변

5

예, 해제해야합니다. Instruments, Leaks, ObjectAlloc 및 친구들과 같은 도구는 오류가 없습니다. 인스턴스를 생성하기 위해 상수 문자열을 사용했기 때문에 누수가 전혀 발생하지 않을 가능성이 큽니다. 그럼에도 불구하고 객체가 +alloc 인 경우 -release 객체가 누출되지 않도록해야하므로 실제로이 객체를 릴리스해야합니다. 코코아 메모리 관리 문서에 대한 링크의

내 일반적인 세트는 : http://iamleeg.blogspot.com/2008/12/cocoa-memory-management.html

3

당신이보고있는 것은 아마 구현 세부입니다. 나는 인자에 대한 불변의 문자열을 가진 -[NSString initWithString:]이 그 인자를 유지하고 그것을 반환한다고 의심한다. @"Hello world"과 같은 상수 문자열의 경우 프로그램 수명 기간 동안 중단되므로 보유 및 릴리스는 아무 것도하지 않습니다.

하지만 그 중 아무 것도 신경 쓸 필요가 없습니다. 코코아는 메모리 관리 지침을 따르면 메모리가 올바르게 관리된다는 것을 보장합니다. 장면 뒤에서 정확히 작동하는 방식은 일반적으로 관심을 가져야 할 대상이 아닙니다. 규칙을 따르고 있는지 여부입니다.

+1

다른 방법을 사용하세요. 규칙을 따르면 앱이 누출되지 않습니다 (어딘가에 버그가없는 경우). 규칙을 지키지 않으면 언젠가 앱이 누출 될 것입니다. –