2010-12-31 6 views
0

와 나는이 같은 수레와 배열을로드 오전 : 목표 C 메모리 관리 문제는 NSArray를

NSArray *arr= [NSArray arrayWithObjects: 
       [NSNumber numberWithFloat:1.9], 
       [NSNumber numberWithFloat:1.7], 
       [NSNumber numberWithFloat:1.6], 
       [NSNumber numberWithFloat:1.9],nil]; 

지금 나는 그러나 나는 소매 카운트에 의해 혼란 스러워요,이 그것을하는 올바른 방법 알고있다.

  1. 각 개체는 [NSNumber numberWithFloat:] 메서드로 생성됩니다. 이 개체를 1 dosnt 그것을 보유 개수를 제공합니까? - 그렇지 않으면 객체가 재생 됨

  2. arrayWithObjects: 메서드는 각 객체에 retain 메시지를 보냅니다.

이 배열은 각 개체 내가 놓친 무엇 1.

의 유지 카운트를 떠나 해제 할당 해제하면 각 객체 2의 유지 계속을 가지고 의미?

답변

6

NSNumber numberWithFloat : 메서드가 유지 된 개체를 반환하지 않습니다.

일반적으로 alloc, copy 또는 new을 사용하지 않는 경우 보유 개수가 0 인 개체가 있다고 가정 할 수 있습니다. 따라서 NSArray에 객체가 추가 된 경우에만 유지가 수행됩니다. http://interfacelab.com/objective-c-memory-management-for-lazy-people/

+0

감사합니다. 블로그를 잘못 읽었습니다. NSNumber numberWithFloat :'메소드가 어떻게 유지 된 객체를 반환하지 않을 수 있습니까? 어떻게 이런 종류의 클래스 메소드를 구현할 수 있습니까? – Robert

+0

@Robert - NSNumber는 단순히 객체를 반환하지만 자신을 만들지 않았으므로 소유하지 않습니다. (당신이 원한다면 물론 그것을 유지할 수 있습니다.) –

+1

@ 로버트 : 당신은 매우 간단하게 구현할 수 있습니다 : + (id) numberWithFloat : (float) aFloat {return [[self alloc] initWithFloat : aFloat] autorelease]; } –

2

이러한 개체를 해제 할 필요가 없습니다 :

에서 그런 일 이상에 대한 좋은 블로그가 있습니다.
arrayWithObjects:numberWithFloat:은 소유하지 않은 개체를 만듭니다.