2017-02-02 3 views
2

Objective C에서 ViewController에 UIKit 객체 속성이있는 경우 뷰를 말하고 viewDidLoad에서 인스턴스화 한 다음 하위 뷰에 추가하여 메모리를 제거하고, removeFromSuperview()와 nil로 객체를 설정해야합니다. (틀린 것이 아니라면 ...)보기, ARC, Objective C 및 Swift와의 차이점 제거

그러나 Swift에서는 선택적 유형 nil의 값을 유지할 수 있습니다.

내 응용 프로그램 내에서 UILabels 또는 UIView와 같은 것들을 애니메이트하고 나중에 사용자가 사라지고 메모리에서 제거되도록하려는 경우 해당 UIKit 객체가 removeFromSuperView()이면 충분합니다. ? 또는 내가 선택, removeFromSuperView() 애니메이션을하려고하는 모든 개체를 만들어야 만 nil 설정할 수 있습니까?

불쌍한 표현에 사과드립니다. 추가 설명이 필요하면 알려 주시기 바랍니다. 귀하의 의견에 많은 감사드립니다.

+0

하위보기는 상위 개체 (기본 제공되지 않는 속성은 소유 인스턴스의 초기화가 끝나기 전에 값을 가져야 함) 이후에 초기화되기 때문에 일반적으로 선택 사항입니다. 그래서 당신은 예를 들어 '@IBOutlet 약한 var myLabel : UILabel!'항상 ('?'도 할 것이지만 덜 편리하다) –

+1

@NicolasMiari가 맞다. 2 가지를 추가하고 싶습니다. 1) UIView 유형의 속성을 선택 사항으로 만들지 않는 이유는 거의 없습니다. 그것은 UIViewController 초기화를 단순화하고 2) removeFromSuperView는 단순히 UIView.removeSubview (: UIView)를 호출합니다. 객체를 nil로 설정하지 않습니다. – dylanthelion

답변

3

weak 속성 개체의 할당을 해제하려면 예, nil으로 설정하거나 소유 개체 할당을 기다려야합니다.

weak이 아닌 속성의 개체는 부모 개체가 할당 해제 될 때 release 호출을 가져옵니다. 즉, 객체에 대한 참조가 유지되지 않으면 객체도 할당 취소됩니다.

UILabel을보기 컨트롤러의 속성이 아니며 애니메이션으로 만든 다음 removeFromSuperview() 임시 메모리를 만들면 메모리에서도 사라집니다.

나중에 뷰 계층 구조 (refcount: 2)에 의해 애니메이션을 생성하는 함수가 실행될 때 (refcount: 1)이 유지 되었기 때문에 함수는 (refcount: 1)으로 끝났으므로 뷰 계층 구조 만이이를 유지하고있었습니다. 애니메이션 (refcount: 0) 끝 부분에서 제거한 경우 할당이 해제됩니다.