2011-09-01 4 views
0

정확히 NSMutableArray의 addObject 메소드가 작동합니까? 새 인스턴스를 만들고 배열에 추가합니까? 아니면 단순히 SAME 객체에 대한 참조를 배열에 추가합니까?NSMutableArray에 대한 질문, 포인터 및 릴리스

대답은 단지 객체에 대한 참조를 삽입 할 경우, 내 다음 질문으로 리드 :

것은 이제 나는 내 수업 중 하나 ('목록'입니다있는 NSMutableArray)에 다음과 같은 방법을 가지고 있다고 가정 해 봅시다, 기꺼이이 코드는 내가 원하는 방식으로 작동하지만, 난 그냥 이유를 완전히 이해하지 않는 것 :

-(void)buyItem:(Item *)anItem 
{ 
    Item * newItem = [[Item alloc]init]; 
    newItem.name = anItem.name; 
    newItem.details = anItem.details; 
    [list addObject:newItem]; 
    [newItem release]; 
} 

그래서 기본적으로 호출 한 후 [목록 addObject : 인 newItem를, 지금 두 개의 기준 가리키는 총있을 것 동일한 객체 오른쪽 (newItem 및 'list'배열의 다른 객체)?

왜 NSMutableArray의 'list'에있는 newItem 객체를 제거하지 않습니까? 그들은 같은 대상을 가리키고 있지 않습니까?

답변

2

NSMutableArrayaddObject: 메서드를 사용하여 개체를 추가 할 때 retainobject이 추가되었습니다. 이것이 나중에 release이 될 수 있으며 나중에 objectAtIndex: 메소드를 사용하여 액세스하여 사용하십시오.

+0

아 맞아요. 지금 당장 가져 가세요! 귀하의 답변을 주셔서 감사합니다 – lucas32

1

참조를 추가 한 다음 개체 보유 수를 1 씩 늘립니다. 당신이하고있는 일은 정확하며 배열에 1의 보유 수를 유지합니다.

참조 용. What increases an object's retain count?

+0

봐요! 감사. 보유 카운트를 지금 보게 될 것입니다. – lucas32

0

releasedealloc의 차이를 이해하는 것이 중요합니다. release은 카운트가 0으로 감소 할 때 releasedealloc 개체로 이동한다는 것을 제외하고 단순히 "보유 카운트"를 감소시킵니다.

Objective-C 객체에 객체 참조 (즉, 포인터)를 전달할 때 일반적으로 (다른 점을 제외하고), 참조의 복사본을 호출 기간 이상으로 유지하면 retain 그 자체가 객체를 대신해, 객체 자체가 할당이 해제되었을 때, 또는 참조의 카피가 무효가되거나 덧 쓰기되는 경우는 객체에 책임을집니다.