2012-01-17 2 views

답변

3

개체가 초기화 될 때 개체 자체의 소유권을 주장합니다. 이것이 유용 할 수 있다는 것을 알 수있는 유일한 이유는 어떤 사건이 일어날 때까지 물체가 자신의 존재를 보장해야 할 필요가있는 경우입니다. 예를 들어 타이머를 실행 한 다음 타이머가 만료되면 자체를 해제 할 수 있습니다.

문서화되어 있지 않고 해당 릴리스가없는 경우 버그 일 가능성이 큽니다.

-3

개체가있는 경우 치료/생명이있는 것과 같습니다. 당신이 그것을 만들었을 때, 그것은 하나의 살아있다. 과. 함수 '보유'삶의 수를 늘리십시오. +1, 해제 함수는 자신의 생명수를 줄입니다. -1, dealloc도 감소하고, 할당량이 증가합니다.

+1

이것은 확실히 OP가 요청한 것이 아닙니다. 문제는 '자기 유지'가 정상적인 '보유'대신에 어떻게 작동하는지입니다. – Skyler

1

올바르게 기억한다면 일부 성취는 성숙을 피하기 위해 자기 보유를 사용합니다. 정확하게 모범 사례는 아니지만, 게임의 규칙 (이 경우 Obj-C)을 알고 있다면 (때때로)이를 깨뜨릴 수 있습니다.

+0

전체적으로. 당신은 효과적으로'show'를 호출 할 때 UIKit에 경고를 넘겨주고 더 이상 원하지 않으면'release'합니다. UIKit의 무언가 뒤에는 의심의 여지가 없습니다. (예를 들어 뷰 계층 구조에 추가되어 슈퍼 뷰에서 처음부터 유지할 수 있습니다.) – mattjgalloway

+0

오른쪽 ... 앱 윈도우가 아마 리테이너입니다. –

1

이것은 아마도 오류 인 것 같습니다. 대개 자신을 유지하는 것이 목표가 아닙니다.

대리인 및 알림 : 사용자의 라이프 사이클을 훨씬 조심해야하지만이 경우에도 개체 자체에서 해제/보유를해서는 안됩니다. 에릭에

참고 : 뷰가되어 있지만,보기 hiercarchy에 다음 참조 때문에이 파괴되기 전에

UIAlert의 경우, 당신이 그것을 해제 할 수 있습니다. 뷰가 뷰 계층 구조에서 제거 될 때 뷰가 자동으로 삭제되므로

+0

예 ... 이미 언급했습니다. –

+0

언제 파괴 되었습니까? 아마도 대리자에게 회신 한 후 사용자가 버튼을 누른 직후가 아닙니까? – Ricardo

1

self을 유지하는 것이 좋습니다. 그러나 init 방법을 보면 의심스러운 소리가납니다. 그게 좋은 일이 될 좋은 예를 생각할 수 없습니다. 또한 ARC를 사용하면 더 이상 할 수없는 일을 생각해야합니다. 일반적으로 객체가 살아 있어야한다면, 그 객체를 잡고있는 다른 객체가있을 것입니다. 자체 보유 객체는 결코 공개되지 않는 오류가 발생하기 쉽습니다.

2

코드를 작성하는 사람이 보유 오류를 갖고 있으며 실제 문제와 관련하여 "빠른 수정"이라고 생각하는 것이 가장 좋습니다.

관련 문제