- (void)dealloc
방법에서 IBOutlet
에서 nil
으로 선언 된 retain
수식어로 모두 @property
을 설정해야합니까? 그렇게하지 않으면 메모리가 낭비되거나 낭비 될 것입니까?iOS : dealloc & IBOutlet
자동 참조 횟수가 꺼져 있다고 가정합니다.
- (void)dealloc
방법에서 IBOutlet
에서 nil
으로 선언 된 retain
수식어로 모두 @property
을 설정해야합니까? 그렇게하지 않으면 메모리가 낭비되거나 낭비 될 것입니까?iOS : dealloc & IBOutlet
자동 참조 횟수가 꺼져 있다고 가정합니다.
귀하의 질문은 "어떻게 dealloc에서 속성을 처리합니까?"것 같습니다. 그럼 예제를 살펴 보겠습니다. 시야가 myView
를로드
@property (retain, nonatomic) IBOutlet UIView *myView;
두 개체가 유지된다 (내부 addSubview:
또는 유사한 의해) 뷰 구조 및 (속성 세터 법에 의해) 뷰 컨트롤러. 간단한 로그만으로이 사실을 확인할 수 있습니다. viewDidLoad
이 코드를 배치하는 것은이이 포인터를 해결해야하는 두 가지 방법이 있으며, 모두 자동으로 Xcode
에 의해 당신을 위해 채워집니다 2.
NSLog(@"myLabel is retained: %i", myView.retainCount);
의 출력이 확인됩니다.
처음에는 viewDidUnload
(일반적으로 메모리 부족 상황에서만 호출 됨) 뷰를 해제하려는 경우, 매달린 포인터가 생기므로 포인터를 nil로 설정하려고합니다. Xcode는 단순히 setter 메서드를 사용하여이 작업을 수행합니다.
[self setMyView:nil];
두 번째 장소와 처음 질문 한 장소는 dealloc
입니다. dealloc 당신은 마찬가지로이 경우 (질문에 IBOutlet
기반의 메인 스레드 만 실행) 매달린 포인터가 문제가되지 않아도 귀하의 속성을 릴리스해야합니다. 이는 Xcode가 dealloc을 자동으로 구현함으로써 강화 된 것으로 보입니다. 전혀 유해하지 않을 것이라고 발표 이외에 nil
포인터를 설정 물론
[myView release];
. 그리고 이것이 주 스레드가 아니라면 더 좋을 수도 있습니다 UIKit
요소. 그러나 멀티 스레딩에 대해 걱정한다면 atomic
을 대신 사용하면됩니다.
ARC가 없어도 nil
IBOutlets
에 -(void)dealloc
을 입력 할 필요가 없습니다. 인스트루먼트를 테스트하면 UIView
할당이 해제 되 자마자 IBOutlets
에 연결된 인터페이스 요소의 메모리가 정상적으로 릴리스됨을 알 수 있습니다.
그러나 앱에서 스레딩을 사용하는 경우 다른 스레드가 문제의 오브젝트가 아직 사용 가능한지 여부를 쉽게 판단 할 수 있으므로 스레딩을 사용하는 것이 좋습니다.
가능한 복제본 [dealloc에서 출구 변수를 0으로 설정해야합니까 (IOS 3.0 이후에도 가능합니까?)] (http://stackoverflow.com/questions/5658535/is-it-required-to-set-outlets) -varibles-to-nil-in-dealloc-even-after-ios-3-0) –