2011-01-16 3 views

답변

7

당신은 내가 오토 릴리즈 객체를 유지하면 어떻게되는지 알아? 이 출시 되나요? 아니면 보유가 승리합니까?

retain "이긴하지만"그런 식으로 생각하면 실패합니다.

보유 및 해제는 개체의 보유 수를 늘리거나 줄이는 메커니즘 일뿐입니다. Autorelease는 단순히 지연된 릴리스입니다. 그 이상도 이하도 아닌.

자동 회수 된 개체를 보유하고있는 경우 보유 개수가 나중에 줄어들지 만 지금은 보유 개수를 늘리고 있습니다. 이것은 항상 발생합니다. [NSString stringWithFormat: @"...."]은 이벤트 루프를 통해 현재 패스를 넘기를 원한다면 retain의 자동 반복 문자열을 반환합니다.

2

변수를 유지하려면 이 필요합니다. 유지하려면이 필요합니다. 예를 들어 :

myButton = [[UIButton buttonWithType:...] retain]; 

buttonWithType: 방법은 autorelease 인스턴스화 된 것 UIButton을 반환합니다. 그것은 필요할 때 언제든지 스스로를 발표 할 것입니다.

2

보유가 종료됩니다. 이는 매우 일반적이며 예외적 인 관행입니다.

은 일반적으로 편리한 방법은 너무 오래 당신이 나중에 출시 기억으로,

[NSString stringWithFormat:@""]; 

당신이 당신이 필요 어떤 객체를 유지할 것으로 예상된다처럼 오토 릴리즈 객체를 반환합니다.

자동 응답은 현재 시스템 메시지의 끝에서 발생한다는 것을 기억하십시오.

아래 문서에서 : "시스템에서 처리하는 각 메시지에 대해 자동 해제 풀이 만들어지고 풀의 개체가 모두 해당 메시지 처리가 완료된 후 자동으로 해제됩니다."

이의 멋진 설명

는 여기에서 찾을 수 있습니다 :

http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html

+0

autorelease가 현재의 방법의 결론에서 반드시 (반드시) 발생하지 않는다는 점을 제외하면 꽤 좋은 대답입니다. 자동 릴리즈 된 오브젝트는 풀이 빠져 나갈 때만 릴리스되며 일반적으로 실행 루프를 통과 할 때마다 한 번씩 발생합니다. autoreleased 오브젝트는 오랜 시간 동안 붙어있을 가능성이 있습니다. – kubi

+0

@ kubi : "자동 릴리스 풀은 시스템에서 처리하는 각 메시지에 대해 만들어지고 풀의 개체는 모두 해당 메시지 처리가 완료된 후 자동으로 해제됩니다." 나는 현재의 메시지를 의미하지는 않았다. 나는 현재의 시스템 메시지를 의미했다. 나는 내 자리를 바로 잡을거야. –

+0

"현재 시스템 메시지"는 개념적으로 정확하지만보다 정확한 용어는 "현재 이벤트"입니다. 일반적으로 "현재 루프 런으로 처리되는 이벤트"입니다. – bbum