2010-03-12 6 views
7

NSArray의 요소를 언제 릴리스해야하는지에 관해서 초보자 질문이 있습니다. 의사 코드 다음을 참조하십시오 : 나는 2DArray를 놓을 때 여기목표 C 배열 및 객체 릴리스

NSMutalbeArray *2DArray = [[NSMutableArray alloc] initWithCapacity:10]; 
for (int i=0;i<10;i++) { 
    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:5]; 
    for (int j=0;j<5;j++) { 
    MyObject *obj = [[MyObject alloc] init]; 
    [array addObject:obj]; 
    [obj release]; 
    } 

    [2DArray addObject:array]; 
    [array release]; 
} 
// use 2DArray to do something 

[2DArray release] 

내 질문은, 내가 명시 적으로 먼저 요소 (배열)의 각을 해제해야합니까? 또한 "배열"객체를 릴리스하기 전에 각 요소 (MyObject)를 먼저 릴리스해야합니까?

저는 객관적으로 C를 처음 접했습니다. 도와주세요. 감사.

답변

14

아니요, 각 개체를 release (으)로 말할 필요는 없습니다. release 메서드를 NSArray으로 보내면 먼저 release 메서드가 내부의 각 항목에 자동으로 전송됩니다.

귀하의 경우에는 [2DArray release]을 보내주십시오. 그러면 자동으로 [array release]이 다른 모든 배열로 보내지며 각 배열은 array 안에있는 각 객체에 [obj release]을 보냅니다.

4

보관 된 개체를 해제 할 필요가 없습니다. NSArray는 추가 할 때 유지하고 놓을 때 해제합니다. 따라서 할당하고 배열에 추가 한 다음 해제하면 배열의 객체의 보유 개수는 1이됩니다. 배열이 해제되면 객체가 해제되어 해제됩니다.

2

개체를 만들 때 보유 개수는 1입니다. 개체를 배열에 추가 할 때마다 보유 개수가 증가합니다 (이 경우 2로 증가). 배열에 추가 한 후 코드에서 객체의 보유를 해제하고 보유 수를 1 씩 줄입니다 (이 경우 1). 그런 다음 배열을 놓으면 보유 수를 1 (이 경우 0)만큼 떨어 뜨리는 모든 항목에 대해 release를 호출합니다. count 히트를 0으로 유지하면 객체의 할당이 해제됩니다.

코드는 메모리 관리 관점에서 올바르게 보입니다.