커스텀 할당 해제 및 ARC(객관-C)
나의 작은 iPad 앱에는 옵서버를 사용하는 "스위치 언어" 기능이 있다.모든 뷰 컨트롤러는 그 동안 옵서버에 등록됩니다.viewDidLoad:.
- (void)viewDidLoad
{
[super viewDidLoad];
[observer registerObject:self];
}
사용자가 "언어 변경" 버튼을 누르면 새 언어가 내 모델에 저장되고 관찰자에게 알림이 전달되고 호출됩니다.updateUi:셀렉터를 선택합니다.
이것은 TabBarController에 뷰컨트롤러가 있는 경우를 제외하고 매우 잘 작동합니다.이는 탭 막대가 로드될 때 보기를 초기화하지 않고 하위 컨트롤러에서 탭 아이콘을 가져오기 때문입니다.viewDidLoad:이 뷰 컨트롤러는 호출되지 않으므로 언어 변경 알림을 수신하지 않습니다.이것 때문에, 나는 내 몸을 움직였다.registerObject:에의 콜init방법.
내가 사용했을 때viewDidLoad:내 관찰자에게 등록하기 위해, 나는 이용했다.viewDidUnload:등록해제합니다.지금 등록하고 있기 때문에init등록해제하는 것은 매우 의미가 있습니다.dealloc.
하지만 여기 내 문제가 있다.글을 쓸 때:
- (void) dealloc
{
[observer unregisterObject:self];
[super dealloc];
}
다음의 에러가 표시됩니다.
ARC는 '할당 해제'의 명시적 메시지 전송을 금지합니다.
전화해야 하니까[super dealloc]슈퍼클래스가 제대로 청소할 수 있도록 하지만 ARC는 그걸 금지하고 있어, 난 이제 갇혔어.내 물건이 죽어갈 때 알림을 받을 수 있는 다른 방법이 있나요?
ARC를 사용할 때는 단순히 콜을 하지 않습니다.[super dealloc]명시적으로 - 컴파일러가 대신 처리합니다(Clang LLVM ARC 문서 7.1.2 장 참조).
- (void) dealloc
{
[observer unregisterObject:self];
// [super dealloc]; //(provided by the compiler)
}
언급URL : https://stackoverflow.com/questions/7292119/custom-dealloc-and-arc-objective-c
'programing' 카테고리의 다른 글
| iPhone 시뮬레이터에서 시간과 시간대를 변경하는 방법은? (0) | 2023.04.16 |
|---|---|
| WPF에서 창을 앞으로 가져옵니다. (0) | 2023.04.16 |
| 명령 출력을 배치 파일의 변수로 설정하는 방법 (0) | 2023.04.16 |
| 개인 및 웹 호스팅 인증서 저장소의 차이점은 무엇입니까? (0) | 2023.04.16 |
| C#: 개체 목록을 해당 개체의 단일 속성 목록으로 변환하려면 어떻게 해야 합니까? (0) | 2023.04.16 |