1

我有一个具有各种属性的用户类:

@property (strong, nonatomic) NSString *CandID;
@property (assign, nonatomic) BOOL IsCandidate;
@property (assign, nonatomic) NSInteger ResponseCode;
@property (strong, nonatomic) NSMutableArray *locations;

ETC

我的一个 ViewControllers 可能有一个用户属性,即

@property (strong, nonatomic) User *user;

并且这个用户可能会被传递给后续以模态方式启动的 ViewController。

当用户对象第一次初始化时,我将在中央调度中发送一些方法,该方法将通过 REST 填充位置数组。这个想法是,当有人使用我的应用程序进入屏幕选择位置时,列表已经被下载。

我想要做的是在 gcd 使用它时锁定位置区域,我使用过类似的东西

[someLock lock] ... [someLock unlock]

在过去,但我想要的是要锁定的位置数组,但其余的用户对象的方法和属性可以从主线程访问。实现这一目标的最佳方法是什么?

4

1 回答 1

4

我会将后台线程中的位置提取到一个单独的数组中,并仅在数据完成时将其分配给用户,例如:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSMutableArray *locations;
    // ... fill locations ...        
    dispatch_sync(dispatch_get_main_queue(), ^{
        user.locations = locations;
        // ... perhaps refresh some view or send a notification ...
    })
});

然后user.locations总是可以在主线程上访问,并且要么是要么nil包含获取的位置。

于 2013-07-31T17:18:11.663 回答