2012-10-28 3 views
1

웹을 통해 검색하고 많은 게시물을 읽었지 만 아직 정확하게 어떻게 작동하는지 설명하지 못했습니다.메모리 관리에서 반환 값을 autorelease 할 때

-(MyClass*)findRandomName { return [[[MyClass alloc] initWithString:@"Something"] autorelease]; } 

내 질문은, 나는 또한에 오토 릴리즈 호출해야합니다 : 나는 규칙이 어떤 방법 (ALLOC, 새를 제외하고 복사 mutableCopy)는 오토 릴리즈 객체를 반환 그래서 이런 일이 괜찮해야한다고 말한다 것을 알고있다 편리한 방법이나 비슷한 것을 사용한다면 반환 값은? 여기에 좋아요 :

-(MyClass*)findRandomName { return [[MyClass startFromString:@"Something"] autorelease]; } 

왜, 또는 왜? 고맙습니다. 이 두 번째 예를 들어 당신이해야 하지autorelease 개체에서 :, initWithString를 호출하기 전에

-(MyClass*)findRandomName { 
    return [[[MyClass alloc] initWithString:@"Something"] autorelease]; 
} 

을 예컨대을 [MyClass alloc]를 호출해야합니다으로

+0

첫 번째 코드 줄에서 'alloc'은 어디에서 호출 되었습니까? – rmaddy

+0

아, 깜박 했네. – ArniDat

답변

2

첫 번째 예는 올바르지 않습니다. startFromString 메서드는 이미 autorelease 개체 여야하며 autorelease 개체를 다시 릴리스해야합니다. 두 번째 예에서

(이 호출하는 방법은 이름에 alloc, new, copy 또는 mutableCopy 포함되어 있지 않기 때문에) 그래서하지 release 오브젝트해야 개체의 소유권을하지 않는 findRandomName 방법.

"대회에서 어떤 방법으로도 자동 회수 된 개체 (init, new 및 copy 제외)가 반환되어야한다고 규정하고 있습니다."라는 진술은 정확하지 않습니다. memory management policy는 말한다 : 당신은 어떤 객체를 소유

당신은 당신은 이름이 "ALLOC" "새로운", "복사"또는 "mutableCopy"로 시작하는 방법을 사용하여 객체를 생성

를 만들 (예 : alloc, newObject 또는 mutableCopy).

+0

정확한 답변 (찾고 호핑), 감사합니다! – ArniDat

+0

이 질문에 대한 답변을 수락하는 것을 잊지 마십시오. – mttrb

+0

나는 확실히 타이머가 날 수 있도록;) – ArniDat

관련 문제