I have a simple class that exposes a method that makes multiple server calls to fetch object data for a list of object IDs. That method enumerates through the list of object IDs and makes individual server calls, shown below...

```
@implementation MyClass

- (void)fetchObjectsFromServerWithObjectIDs:(NSArray*)objectIDs {

    typeof(self) __weak blockSelf = self;
    for(NSString *objectID in objectIDs) {
        [self fetchObjectDataForObjectID:objectID withSuccessBlock:^{
            if(objectID == [objectIDs lastObject]) {  //<---will this work?
                [blockSelf.delegate finishedFetching]; 
            }
        }];
    }
}

- (void)fetchObjectDataForObjectID:(NSString*)objectID
                  withSuccessBlock:(void (^)())successBlock {

    void (^successWrapperBlock)(void) = ^{

        //Some processing of returned data is done here

        if(successBlock) {
            successBlock();
        }
    };

    [HTTPClient fetchObjectDataWithObjectID:objectID
                            withSuccessBlock:successWrapperBlock
                                failureBlock:nil];
}

@end

```

...I'm trying to figure out the best way to check if the last `successBlock` is being executed so I can tell the delegate it's finished fetching the data. I have a comment in the code "<---Will this work?" marking the statement that's doing the check, but it doesn't feel safe to me since the block is asynchronous and `if(objectID == [objectIDs lastObject])` could be true when the first successBock if executed. 

How can I determine when the last `successBlock` is being executed? Thanks in advance for your wisdom!