2016-12-08 2 views
0

아직 Objective-C의 기초를 연구 중입니다. NSObject에서 이와 같은 코드를 작성했습니다. 다시 관찰자를 제거해야합니까? 그렇다면 어디에서 제거 할 수 있습니까? ARC를 사용하고 있습니다. dealloc에서 제거해야합니까?NSObject에서 옵저버를 제거해야합니까?

- (id)init { 
    if (self = [super init]) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(preferredContentSizeChanged:) 
     name:UIContentSizeCategoryDidChangeNotification 
     object:nil]; 

    } 
    return self; } 

답변

0

iOS 9 이상을 타겟팅하는 경우 추가 한 옵서버를 삭제하지 않아도됩니다. 당신이 여기에 대한 자세한 내용을 읽을 수 있습니다 Unregistering NSNotificationCenter Observers in iOS 9

+0

감사합니다. ios 8 이하의 경우이 글을 작성해야합니까? - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver : self 이름 : UIContentSizeCategoryDidChangeNotification 개체 : 없음]; } –

+0

너는, 다만 각자를 제거 할 필요가 있고, 모두를 제거 할 것이다 – Tj3n

+0

keypath 관찰자는 어떨까요? 덕분에 –

1

아이폰 OS 8 또는 이전 당신은 관찰자 객체를 할당 해제하기 전에이 알림에 대한 등록을 취소해야합니다. 잊을 경우 충돌의 위험이 있습니다. OS X 10.11 및 iOS 9.0

이상

NSNotificationCenter 및 NSDistributedNotificationCenter가 더 이상 할당 해제 할 수 있습니다 등록 된 관찰자에게 알림을 보낼 수 없습니다.

https://developer.apple.com/library/content/releasenotes/Foundation/RN-Foundation/index.html#//apple_ref/doc/uid/TP30000742

+0

. ios 8 이하의 경우이 글을 작성해야합니까? - (void) dealloc { [[NSNotificationCenter defaultCenter] removeObserver : self 이름 : UIContentSizeCategoryDidChangeNotification 개체 : 없음]; } –