0

我有名为 dataLoadingForChallenges 的方法。反过来,我会在需要时调用另外两种方法。我在课堂上使用此方法两到三次来处理不同的事件,在一个事件中,我想在 cellForRowAtIndexPath 方法中异步调用此方法。下面的代码是否可以接受。我不想将 dataLoadingForChallenges 中的所有代码粘贴到这个 GCD 块中。从 GCD 块调用可重用方法的方法是什么。

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
            dispatch_async(q, ^{
            [self dataLoadingForChallenges];
                 });
4

1 回答 1

1

您可以将一个方法调用,甚至两个较大的一次封装在您拥有的块中。然后你的调度块会稍微干净一些,并且可以随时触发块:

typedef void (^DataLoadBlock)();

@interface MyClass ()

@property (nonatomic, copy) DataLoadBlock dataLoadBlock;

@end

- (id)init {
    self = [super init];

    //Avoid a retain cycle with blocks that we own referencing self
    __weak id weakSelf = self;
    _dataLoadBlock = ^{
        id blockSelf = weakSelf;
        [blockSelf dataLoadingForChallenges];
        //Or put your other two messages, or even the bodies of those methods in the block.
    };
    return self;
}

- (void)loadData {
    dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(q, self.dataLoadBlock);
}
于 2013-03-28T06:43:41.637 回答