ios中有没有监听系统时间变化的回调方法或通知之类的?

yuanhuachao89 2016-06-22 11:22:43
UIApplicationSignificantTimeChangeNotification,NSSystemClockDidChangeNotification这两个通知都试过了,时间变化时没有调用(单位是分)。在线急等,谢谢
...全文
829 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hslinux 2016-06-23
  • 打赏
  • 举报
回复

- (void) myTimer
{
    uint64_t u64Time      = 0;
    unsigned int uiSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    fd_set fdread;
    timeval seltime;
    seltime.tv_sec = 0;
    seltime.tv_usec = 100;
    
    
    uint64_t u64BeginTime   = 0;
    uint64_t u64CurTime     = 0;

    for ( ; m_bRunTimer; )
    {
        NSDate* date         = [NSDate dateWithTimeIntervalSinceNow:0];
        NSTimeInterval ti    = [date timeIntervalSince1970] * 1000;
        if ( !u64BeginTime )
        {
            u64BeginTime = ti;
        }
        u64CurTime = ti;

        FD_ZERO(&fdread);
        FD_SET(uiSocket, &fdread);
        select(uiSocket + 1, &fdread, NULL, NULL, &seltime);

        u64Time = u64CurTime - u64BeginTime;
        
        uint64_t u64Hour    = u64Time / ( 1000 * 60 * 60 );
        uint64_t u64Minute  = u64Time / ( 1000 * 60 ) % 60;
        uint64_t u64Second  = u64Time / 1000 % 60;
        uint64_t u64Msec    = u64Time % 1000;
        
        NSString *strTime   = [ [NSString alloc] initWithFormat:@"%02llu:%02llu:%02llu.%03llu", u64Hour, u64Minute, u64Second, u64Msec];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            self.m_tfTime.stringValue     = strTime;
            self.m_tfTimeMSec.stringValue = [[NSString alloc] initWithFormat:@"%010llu", u64Time ];
        });
    }
}
需要什么时间级别的,,修改这个 timeval seltime; seltime.tv_sec = 0; seltime.tv_usec = 100; 的值即可。
CodingFire 2016-06-22
  • 打赏
  • 举报
回复
用runloop写吧,最好在需要的界面开线程启用runloop,要不然就是定时器无限检测了
yuanhuachao89 2016-06-22
  • 打赏
  • 举报
回复
引用 4 楼 cljlove 的回复:
dispatch_source_t试过么?是否满足需求?
没试,应该是可以的。但这都是通过定时器的形式,有没有更直接的方法知道系统时间改变了(以分钟为单位)
打转的风铃 2016-06-22
  • 打赏
  • 举报
回复
dispatch_source_t试过么?是否满足需求?
CodingFire 2016-06-22
  • 打赏
  • 举报
回复
你去网上搜吧,很多的,但是runloop同样需要for循环和do,while驱动。
yuanhuachao89 2016-06-22
  • 打赏
  • 举报
回复
引用 1 楼 CodingFire 的回复:
用runloop写吧,最好在需要的界面开线程启用runloop,要不然就是定时器无限检测了
我用定时器试了下,时间间隔是5秒,不过不太及时。太频繁又怕性能上不好,有没有好一点的方法?你说的runloop能不能给个大体的代码

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧