技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 移动开发 > ios > 正文

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

来源: 技术CTO 阅读:

UIApplicationSignificantTimeChangeNotification,NSSystemClockDidChangeNotification这两个通知都试过了,时间变化时没有调用(单位是分)。在线急等,谢谢

用runloop写吧,最好在需要的界面开线程启用runloop,要不然就是定时器无限检测了
引用 1 楼 CodingFire 的回复:
用runloop写吧,最好在需要的界面开线程启用runloop,要不然就是定时器无限检测了

我用定时器试了下,时间间隔是5秒,不过不太及时。太频繁又怕性能上不好,有没有好一点的方法?你说的runloop能不能给个大体的代码
你去网上搜吧,很多的,但是runloop同样需要for循环和do,while驱动。
dispatch_source_t试过么?是否满足需求?
引用 4 楼 cljlove 的回复:
dispatch_source_t试过么?是否满足需求?

没试,应该是可以的。但这都是通过定时器的形式,有没有更直接的方法知道系统时间改变了(以分钟为单位)

- (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;

的值即可。

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^