2011-01-05 3 views
0

좋아, 내가 가지고있는 경우이 : 그럼목표 - C, 메모리 관리 문제는

NSString *lastPushed = (NSString *)[tagStack objectAtIndex:[tagStack count]-1]; 
.//do something with the last pushed element locally 
.//do more cstuff here 
.//after doing all the stuff needed in the function 

[lastPushed release]; 
내가 lastPushed 놓으면 tagStack는 복사 또는 inited는하지 이후, NSMutableArray를

입니다

, 만 것이다 이 참조를 릴리스하거나 실제로 mutableArray에서 객체를 릴리스 할 예정입니까?

당신이 한

답변

5

하지 alloc, new, 또는 copy 또는 mutableCopylastPushed, 왜 당신이 그것을 풀어줄?

lastPushed은 배열의 개체에 대한 포인터이기 때문에 해제해야합니다. 이 수 배열 문제가 개체에 대한 유효한 포인터가 있다고 생각하지만 당신은 그것을 발표했습니다 그리고 그것은 dealloc 에드.

4

lastPushed 및 배열이 모두 인 동일한 객체을 가리 키므로 배열의 객체를 해제합니다.

항상 그렇듯이 관리 규칙을 따라야합니다. 당신이 만들거나, 보관하거나, 복사하지 않은 것을 풀어 내지 마십시오.

+0

"new", "copy"또는 "alloc"으로 이름이 지정되지 않은 자신의 함수에 추가하고 싶습니다. 생성되지 않은 객체도 반환해야합니다. 이 기능들에 의해. 그럴 경우 [returnObject autorelease]를 먼저 호출해야합니다. - 이것이 애플의 기능이다. –

2

alloc, copy 또는 new을 사용하지 않았으므로 lastPushed를 해제하면 안됩니다. (그것은 간단합니다.)

당신이 변경 가능한 배열에서 제거하려는 경우, 당신은 NSMutableArray에 적절한 방법 (removeObject 또는 removeObjectAtIndex 등), 그렇지 않으면 당신이 뭘하려는 건지 불분명를 사용해야하는 다음 주/월/년 등을 물릴 것입니다.