iOS系统的底层通知框架库( 二 )

  • //通知的取消,设置后此token将不再接受消息的通知 。 
  • uint32_t notify_cancel(int token); 

  • 四、通知消息发送检测
    有的时候我们并不想注册某个通知消息处理器来对通知进行处理,而只是想检测某个通知消息是否已经被发送过,为此系统提供两个函数来实现这功能:
     
    1. //注册一个通知消息检测的token 。 
    2.  uint32_t notify_register_check(const char *name, int *out_token); 
    3. //检测这个token所对应的通知消息是否被发送过 。如果通知消息被发送过则check返回1,否则返回0 。 
    4.  uint32_t notify_check(int token, int *check); 

    五、通知消息的状态
    对于通知消息的监听者来说,我们可以对返回的token绑定一个64位的状态数据 。我们可以获取以及设置它 。这个状态数据主要用来实现对通知监听者的扩展处理 。
    1. uint32_t notify_set_state(int token, uint64_t state64) 
    2. uint32_t notify_get_state(int token, uint64_t *state64) 

    六、系统预置的通知消息
    操作系统底层支持了一些预置的通知消息,这些通知消息在头文件notify_keys.h中被声明 。这些预置的消息有针对目录服务的、有针对磁盘空间和卷挂起的、有针对网络配置改变的、有针对写日志通知的、有针对系统时区和时间改变的 。每种具体的通知消息可以看文件中的说明,比如下面的例子实现对了对磁盘空间不足,网络状态改变以及对调整了系统的时间进行的监听处理:
     
    1. #include <notify.h> 
    2. #include <notify_keys.h> 
    3.  
    4. void foo() 
    5.    int  token1, token2, token3; 
    6.     //注册监听网络状态改变的通知 。 
    7.    notify_register_dispatch(kNotifySCNetworkChange, & token1, dispatch_get_main_queue(), ^(int token) { 
    8.         //... 
    9.     }); 
    10.      
    11.       
    12.     //注册监听系统磁盘空间不足的通知 
    13.     notify_register_dispatch(kNotifyVFSLowDiskSpaceRootFS, &token2, dispatch_get_main_queue(), ^(int token) { 
    14.         //.... 
    15.     }); 
    16.    
    17.      
    18.    //注册监听系统时间被改变的通知 。 
    19.     notify_register_dispatch(kNotifyClockSet, &token3, dispatch_get_main_queue(), ^(int token) { 
    20.         //... 
    21.     }); 
    22.      
    除了notify_keys.h文件中公开的通知消息外,还有一些未被公开的通知消息,我们可以通过这些未被公开的消息来获取更多关于系统状态的改变,下面的列表将列出所有的系统底层的通知消息,具体每个通知是什么意义就读者自行猜测和验证吧 。
     
    1. "com.Apple.asl.remote" 
    2. "com.apple.system.timezone" 
    3. "com.apple.MCX._managementStatusChangedForDomains" 
    4. "com.apple.CFPreferences._domainsChangedExternally" 
    5. "com.apple.system.clock_set" 
    6. "com.apple.system.timezone" 
    7. "AppleNumberPreferencesChangedNotification" 
    8. "AppleTimePreferencesChangedNotification" 
    9. "AppleDatePreferencesChangedNotification" 
    10. "AppleLanguagePreferencesChangedNotification" 
    11. "AppleTextBehaviorPreferencesChangedNotification" 
    12. "com.apple.librarian.account-token-changed" 
    13. "com.apple.system.batterysavermode" 
    14. "com.apple.accessibility.cache.forcetouch.sensitivity.changed" 
    15. "com.apple.networkd.started" 
    16. "com.apple.neconfigurationchanged" 
    17. "com.apple.networkd.settings" 
    18. "com.apple.system.config.network_change" 
    19. "com.apple.CoreAnimation.CAwindowserver.DisplayChanged" 
    20. "com.apple.networkd.proxy_count" 
    21. "com.apple.iohideventsystem.available" 


      推荐阅读