iOS中的后台同步

时间:2017-06-01 11:20:50

标签: ios singleton automatic-ref-counting grand-central-dispatch

我有一个Sync类,它基本上将数据同步到后台的服务器。

Sync类对象的使用使得我在Sync类对象上发出同步请求的视图控制器可能会在同步实际完成之前被解除分配。

我在这里遇到的问题是Sync类对象也会被解除分配,因此同步请求永远不会完整。

我想过将Sync类作为一个单身人士,但更多的是滥用单身人士模式。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

在开始操作之前,您可以保持指向对象的强指针:

__block StubClass *strongSelf = self;

然后启动方法:

[strongSelf dataSync: ^... { //completionBlock
   strongSelf = nil;
}];

或者使用信号量:

__block StubClass *strongSelf = self;
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
[strongSelf dataSync: ^... {
    dispatch_semaphore_signal(sem);
}];
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
strongSelf = nil;