2012-08-07 3 views
1

저는 CFNotificationCenter를 처음 사용합니다. developer.apple에서 설명서를 읽었을 때 CallbackFunction에서 관찰자는 "관찰자를 식별하는 NULL 이외의 임의의 값"이라고합니다. 콜백 함수 내에서 메소드에 액세스 할 수 있도록 관찰자를 객체로 만들 수 있습니까? 다음은 설명서에 표시된 매개 변수입니다.CFNotificationCenter 콜백 함수 관찰자 란 무엇입니까?

void MyCallBack (
     CFNotificationCenterRef center, 
     void *observer, 
     CFStringRef name, 
     const void *object, 
     CFDictionaryRef userInfo 
    ); 

또 다른 질문입니다. 관찰자를 추가 할 때 관찰자가 누울 수있는 이유는 무엇입니까 ??

void CFNotificationCenterAddObserver (
    CFNotificationCenterRef center, 
    const void *observer, 
    CFNotificationCallback callBack, 
    CFStringRef name, 
    const void *object, 
    CFNotificationSuspensionBehavior suspensionBehavior 
); 

"옵저버 OS X v10.3 이상에서는이 매개 변수가 NULL 일 수 있습니다."

답변

3

observer 인수는 CFNotificationCenterAddObserver에 전달하는 임의의 포인터이며 콜백 포인터와 함께 저장됩니다. 알림 센터에서 콜백을 호출하면 observer 포인터를 인수로 콜백에 전달합니다.

그게 전부입니다. 알림 센터는 포인터를 역 참조하지 않거나 포인터를 보유하려고 시도하지 않습니다. 필요한 경우 콜백에 추가 정보를 전달할 수있는 방법입니다. Objective-C 오브젝트를 참조하기 위해이를 사용하려는 경우, 가능합니다. 관찰자가 등록되어있는 동안 객체가 할당 해제되지 않도록해야합니다.