읽기 소스 코드, 나는 참조 :[자기 보유]가 유효한 경우가 있습니까? 내 현재 프로젝트의
하나 개의 클래스에[self retain]
, 그 init
방법.
나는 이유를 정확하게 이해하지 못합니다. Apple에서 메모리 관리 규칙을 읽었을 때, 이것에 대해서는 아무 것도 보이지 않으며 어떤 가상의 내용도 보이지 않습니다. [self release]
.
읽기 소스 코드, 나는 참조 :[자기 보유]가 유효한 경우가 있습니까? 내 현재 프로젝트의
하나 개의 클래스에[self retain]
, 그 init
방법.
나는 이유를 정확하게 이해하지 못합니다. Apple에서 메모리 관리 규칙을 읽었을 때, 이것에 대해서는 아무 것도 보이지 않으며 어떤 가상의 내용도 보이지 않습니다. [self release]
.
개체가 초기화 될 때 개체 자체의 소유권을 주장합니다. 이것이 유용 할 수 있다는 것을 알 수있는 유일한 이유는 어떤 사건이 일어날 때까지 물체가 자신의 존재를 보장해야 할 필요가있는 경우입니다. 예를 들어 타이머를 실행 한 다음 타이머가 만료되면 자체를 해제 할 수 있습니다.
문서화되어 있지 않고 해당 릴리스가없는 경우 버그 일 가능성이 큽니다.
개체가있는 경우 치료/생명이있는 것과 같습니다. 당신이 그것을 만들었을 때, 그것은 하나의 살아있다. 과. 함수 '보유'삶의 수를 늘리십시오. +1, 해제 함수는 자신의 생명수를 줄입니다. -1, dealloc도 감소하고, 할당량이 증가합니다.
올바르게 기억한다면 일부 성취는 성숙을 피하기 위해 자기 보유를 사용합니다. 정확하게 모범 사례는 아니지만, 게임의 규칙 (이 경우 Obj-C)을 알고 있다면 (때때로)이를 깨뜨릴 수 있습니다.
전체적으로. 당신은 효과적으로'show'를 호출 할 때 UIKit에 경고를 넘겨주고 더 이상 원하지 않으면'release'합니다. UIKit의 무언가 뒤에는 의심의 여지가 없습니다. (예를 들어 뷰 계층 구조에 추가되어 슈퍼 뷰에서 처음부터 유지할 수 있습니다.) – mattjgalloway
오른쪽 ... 앱 윈도우가 아마 리테이너입니다. –
이것은 아마도 오류 인 것 같습니다. 대개 자신을 유지하는 것이 목표가 아닙니다.
대리인 및 알림 : 사용자의 라이프 사이클을 훨씬 조심해야하지만이 경우에도 개체 자체에서 해제/보유를해서는 안됩니다. 에릭에
참고 : 뷰가되어 있지만,보기 hiercarchy에 다음 참조 때문에이 파괴되기 전에이
UIAlert의 경우, 당신이 그것을 해제 할 수 있습니다. 뷰가 뷰 계층 구조에서 제거 될 때 뷰가 자동으로 삭제되므로
예 ... 이미 언급했습니다. –
언제 파괴 되었습니까? 아마도 대리자에게 회신 한 후 사용자가 버튼을 누른 직후가 아닙니까? – Ricardo
self
을 유지하는 것이 좋습니다. 그러나 init
방법을 보면 의심스러운 소리가납니다. 그게 좋은 일이 될 좋은 예를 생각할 수 없습니다. 또한 ARC를 사용하면 더 이상 할 수없는 일을 생각해야합니다. 일반적으로 객체가 살아 있어야한다면, 그 객체를 잡고있는 다른 객체가있을 것입니다. 자체 보유 객체는 결코 공개되지 않는 오류가 발생하기 쉽습니다.
코드를 작성하는 사람이 보유 오류를 갖고 있으며 실제 문제와 관련하여 "빠른 수정"이라고 생각하는 것이 가장 좋습니다.
이것은 확실히 OP가 요청한 것이 아닙니다. 문제는 '자기 유지'가 정상적인 '보유'대신에 어떻게 작동하는지입니다. – Skyler