iOS中的后台同步

iOS中的后台同步,ios,singleton,automatic-ref-counting,grand-central-dispatch,Ios,Singleton,Automatic Ref Counting,Grand Central Dispatch,我有一个Sync类,它基本上将数据同步到后台服务器 使用Sync类对象时,我在其中对Sync类对象发出同步请求的视图控制器可能会在同步实际完成之前解除分配 我在这里面临的问题是Sync类对象也会被释放,因此Sync请求永远不会完成 我曾想过将Sync类作为一个单例,但这更多的是滥用单例模式 如何继续?在开始操作之前,您可以将强指针保持在对象上: __block StubClass *strongSelf = self; 并在其上启动方法: [strongSelf dataSync: ^...

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

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

我在这里面临的问题是
Sync
类对象也会被释放,因此Sync请求永远不会完成

我曾想过将
Sync
类作为一个单例,但这更多的是滥用单例模式


如何继续?

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

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