NSTimer 不起作用

- (void)addTimer {

NSLog(@"Retain count A is %ld", CFGetRetainCount((__bridge CFTypeRef)self));

//timerWithTimeInterval:该方法创建的定时器对象默认没有被添加到运行循环。要手动添加

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"--------dispatch_get_main_queue-------");

_timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(longConnectToSocket) userInfo:nil repeats:YES];

//只要将定时器对象添加到运行循环,就会自动开启定时器

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];

[_timer fire];

});

//    _timer = [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(longConnectToSocket) userInfo:nil repeats:YES];

NSLog(@"Retain count B is  %ld", CFGetRetainCount((__bridge CFTypeRef)self));

}

- (void)removeTimer{

// 让定时器失效:一旦定时器失效。则不能再使用,只能重新创建一个新的定时器

[_timer invalidate];

_timer = nil;

}

// 心跳连接

-(void)longConnectToSocket{

NSLog(@" -- 发送心跳包 -- ");

NSDictionary * param = @{@"memberId" : @"101841"};

[self writeDict:param withMsgType:1];

// 根据服务器要求发送固定格式的数据,假设为指令@".",但是一般不会是这么简单的指令

//    NSString *longConnect = @".\n";

//    NSData  *dataStream  = [longConnect dataUsingEncoding:NSUTF8StringEncoding];

//    [self writeData:dataStream];

}

解决方案:

dispatch_async(dispatch_get_main_queue()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容