2011-04-21 3 views
1

Scenario- 나가 단순화 된 다음 코드 유사한있는 NSMutableArray로부터 검색된 객체를 리턴하는 메소드가 (이 방법은 존재하는 상기 "에서 myArray"및 "currentIndex"이 클래스의 인스턴스 변수라고 가정)objectAtIndex를 통해 NSMutableArray에서 가져온 객체를 반환하는 중 - 필요합니까?

- (MyObject *)getFromArray 
{ 
    return [myArray objectAtIndex:currentIndex]; 
} 

autorelease에 대한 호출을 너무 좋아해야합니까?

- (MyObject *)getFromArray 
{ 
    return [[myArray objectAtIndex:currentIndex] autorelease]; 
} 

나는 객체가 말했다 반환으로 그 오토 릴리즈가 배열에 의해 개체에라고 알고 있지만, 나의 이해는 오토 릴리즈 객체가이 경우, 호출자의 범위의 기간 동안 만 유효 함을,하는 방법입니다 위. 그래서, autorelease (위에서 2 번째 코드 스 니펫에 표시된 것처럼)를 붙이면 문제의 객체가 내 메소드의 호출자에게 유효한지 확인하는 올바른 방법일까요? 그냥 내 추론과 autorelease 작동 방식에 대한 이해가 올바른지 확인하려고합니다.

감사합니다.

답변

6

autorelease에 대한 전화를 걸어야합니까?

아니요! 간단한 메모리 관리 규칙을 항상 준수하십시오. 소유하지 않은 경우 (alloc, new, copy 또는 retain), 자동 해제하지 않아야합니다.

내가 그 오토 릴리즈는 그것을 반환으로 배열로 객체라는 것을 알고는 객체를

을 그 가정이 잘못 있다고 말했다. 배열은 객체를 반환하고 해제하지 않습니다. (실제로 객체에 [[... retain] autorelease]을 호출 할 수도 있지만 다른 문제입니다.) 배열은 객체를 배열에서 제거하거나 배열 자체가 할당 해제 될 때 객체를 해제합니다.

+0

+1 6 초 후에 나를 이길 수 있습니다! ':)' –

+0

해명 해줘서 고마워. autorelease에 대한 내 (나쁜) 가정 때문에 코드에 문제가 있다는 것을 게시하려고했습니다. – dreyln

+0

후속 조치로서 배열에서 검색된 객체를 반환하는 것이 안전합니까? 범위를 벗어나서 getFromArray 호출자가 사용하는 것이 안전하지 않습니까? – dreyln

관련 문제