2012-10-16 2 views
1

저는 메모리 관리 작업의 한가운데에 갇혀 있습니다. 내 질문에 대한 해결을 도와주세요.해제 개체가 필요합니까?

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[Object alloc]init]; 
[array addObject: obj]; 
[obj release]; 

위의 코드에서 obj을 릴리스해야합니까?

답변

5

귀하의 질문에 대한 답변은 : 예, ARC을 사용하지 않는 경우 예. 새 앱을 작성하는 경우 ARC 사용을 진지하게 고려해야합니다.

Objective-C의 컨테이너 객체는 항상 보유/릴리스 횟수의 균형을 유지합니다. 즉, 객체를 추가하지 않은 것처럼 항상 메모리를 관리하고 코드가 보유 수와 균형을 유지하는지 확인해야합니다. 이것은 규칙이며 시행되지는 않지만 내장 클래스가이 규칙을 따르는 것을 항상 신뢰할 수 있습니다. 또한 이러한 문제를 감지하기 위해 정적 분석 (XCode에서 Cmd + Shift + B)을 수행 할 수 있습니다. 위의 코드에서이를 정확히 찾아 냈습니다.

경우 올바른 코드가 상술 될 것이다 :

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[[Object alloc]init]autorelease]; 
[array addObject: obj]; 

또는 NSMutableArray (및 사촌) 보낸

NSMutableArray *array = [[NSMutableArray alloc]init]; 
Object *obj = [[Object alloc]init]; 
[array addObject: obj]; 
[obj release]; 

만큼는 컬렉션에서와 같이 개체를 유지할 것이다.

+0

하지만 여기에 배열을 릴리스 ... 내가 물건을 릴리스 methode 보내드립니다. 만약 내가 틀렸다면 나를 수정하십시오 – Vinay

+0

배열을 릴리스 그것과 아무 상관이 있습니다. 배열은 항상 release/retain의 균형을 유지합니다. 물론 배열을 릴리즈하는 것을 잊어 버리면 객체가 릴리즈되었는지 여부에 관계없이 누수가 발생합니다. – Krumelur

+0

감사합니다 Krumelur – Vinay