나는, 우리는 ARC로 코드를 작성하는 것을에서 인스턴스화 viewDidUnload
에서 nil
속성해야 감안할 때 : (여기 nilling 가끔 IDE에서 생성)의 viewDidLoad 및 ARC와 XIBs
XIB를
initialiser에서
와 약한
- 을 함께 IBOutlet하지 않은
?
나는, 우리는 ARC로 코드를 작성하는 것을에서 인스턴스화 viewDidUnload
에서 nil
속성해야 감안할 때 : (여기 nilling 가끔 IDE에서 생성)의 viewDidLoad 및 ARC와 XIBs
XIB를
와 약한
?
viewDidUnload
의 목적은 앱에 메모리 경고 수신시보기가 제거 되었기 때문에 더 이상 존재하지 않는 사용자 인터페이스 개체에 대한 참조를 제거 할 수있는 기회를 제공하는 것입니다. 따라서 :
(뷰가 언로드되고 있기 때문에) 당신은 nil
모든 사용자 인터페이스를 컨트롤을 설정해야합니다. weak
속성에는 불필요합니다 (일반적으로이 항목에서는 weak
/Apple guidance). 그러나 Xcode가이 속성을 삽입하면 문제가되지 않습니다. viewDidUnload
에서 수행 할 작업에 대한 지침은 Resource Programming Guide: The Nib Files의 "메모리 경고"절을 참조하십시오. 당신은 ARC (예를 들어, 사용하지 않을 경우 특히
그리고 당신은 viewDidLoad
에서 설정 비 사용자 인터페이스 객체에 대한
viewDidUnload
에 nil
에 그 설정에 대한 경계 거라고 만약 당신이 실수로 nil
인스턴스 변수, 당신은 누수가 발생할 수 있습니다). 그리고 복구 할 메모리의 양과 데이터를 다시 검색하는 "비용"(예 : 일부 원격 서버의 경우)의 균형을 원할 수도 있습니다. 그럼에도 불구하고 didReceiveMemoryWarning
에 비 UI 객체에 대한 메모리 해제를 처리하는 것이 좋습니다. 내 마음에viewDidUnload
을보고, 나는 캐시 또는 기타 UI 관련 항목을 비워
didReceiveMemoryWarning
를 사용 일부 메모리를 안전하게 복구 할 수 있습니다. 또한 iOS 6이 염려되는 경우
viewDidUnload
처리가 변경 될 수 있으며 NDA가 공개적으로 논의 할 수 없지만
iOS 6 Beta 4 Release Notes을 참조하고
viewDidUnload
에 대한 참조를 찾아 보시기 바랍니다.
귀하의 일반 규칙 :
nil
모든 strong IBOutlets
만. weak
사람을 그대로 둡니다.nil
모든 속성은 viewDidLoad
에서 인스턴스화하고 하지init
, initWithCoder:
및 initWithNibName:bundle:
.당신은 "즉석에서"다시 또는 nil
체크가되어도 nil
속성은 더 많은 메모리를 확보해야한다.
'weak' 변수를'nil'으로 설정하는 것이 좋습니다? '약한 '참고 문헌 뒤에있는 아이디어는 자동으로 여러분에게 불필요한 것이다.** 약한 참조를 수동으로 없애지 않아야합니다. 뷰가 다시 필요하면'viewDidUnload' 이후에'viewDidLoad'가 항상 호출되기 때문에 생성 된 비 UI 프로퍼티는 nil되지 않습니다. 더 많은 메모리를 확보하는 좋은 방법이 있습니다. 마지막으로, 그는 속성에 대해 이야기하고 있습니다. 'self.property = nil;'을 사용하면 절대 누출되지 않을 것입니다 (당신이 끔찍한 일을하지 않는 한). – Mazyod
@Mazyod 다시 약하다, 맞습니다. 인터페이스 빌더를 통해 IBOutlet을 생성 할 때 Xcode가'viewDidUnload'에서 약한'IBOutlet' 속성을'nil'에 자동으로 추가한다는 것을 감안할 때 저는 이것이 좋은 습관으로 여겨 질 것이라고 추측했지만, 약한'IBOutlet' 속성에는 불필요하다는 것이 맞습니다. 아무런 해를 입지 않습니다 (예 : Xcode가 추가 한 코드 줄을 지우거나 삭제할 필요가 없음).하지만 불필요합니다. 그에 따라 내 대답을 수정했습니다. – Rob
@Mazyod이 속성을'nil'으로 설정했다면, 누수는 없을 것입니다 : 동의합니다. 그러나 내 의견은 실수로 _property의 인스턴스 변수를'nil'으로 설정 한 경우에 관한 것입니다. (그리고 새로운 프로그래머는 그 속성의 인스턴스 변수로 속성 참조를 고정시킵니다.) 더 큰 요점은 그것이 속성이기 때문에 blithelyly 'nil-ing하지 않아야한다는 것입니다. UI 속성 일뿐입니다. 비 UI 속성 (a)은 대소 문자로 처리해야합니다. 그리고 (b) 아마도 viewDidUnload'에 관계없이해서는 안됩니다. – Rob