2012-02-26 2 views
1

왜있는 NSMutableArray 요소가 다음과 같이 추가 될 때 할당 해제되지 않는 :NSMutableArray 요소가 할당 해제되지 않는 이유는 무엇입니까?

[map addObject:[[FLItem alloc] init]]; 

[map release]; 

때 그것은 작동 :

FLItem *item = [[FLItem alloc] init]; 
[map addObject:item]; 
[item release]; 

[map release]; 

는 차이가 여기에 무엇입니까?

P. FLItem의 dealloc 구현에는 NSLog가 있습니다.

답변

4

이 같은 항목을 추가 할 때 :

[map addObject:[[FLItem alloc] init]]; 

또는 같은

:

FLItem *item = [[FLItem alloc] init]; 
[map addObject:item]; 

당신이 (즉, 1이다) 초기화를 사용하여 생성되고 NSMutableArray도 유지하기 때문에 그 유지 카운트가 2 그것 (또 다른 1).

배열을 해제하면 항목이 해제되고 보유 개수가 1이됩니다. 따라서 첫 번째 경우에는 할당이 해제되지 않고 [item release];이라고하는 두 번째 경우에는 할당이 해제됩니다. 당신은 아마 첫 번째 경우에 어떻게해야

은 다음과 같습니다

[map addObject:[[[FLItem alloc] init] autorelease]]; 
+0

당신을 감사합니다! 어떻게 든 init 자체는 retainCount를 증가시키지 않지만 할당은 증가하지 않는다고 생각했지만 지금은 명확하다. – osxdev12

+1

Objective C는 관례에 따라 init, copy 또는 create로 시작하는 메서드를 사용하여 객체를 얻는다. 카운트 +1 유지). 나중에 풀어야합니다. – sch