I agree.

It will decrease the code size and I thinks it's more readable.

I take your example and implemented:

#pragma mark - Private methods

- (void)RI_callTrackersConformToProtocol:(Protocol *)protocol
                                selector:(SEL)selector
                               arguments:(NSArray *)arguments;
{
    if (!self.trackers) {
        RIRaiseError(@"Invalid call with non-existent trackers. Tracking initialisation was either "
                     @"missing or has probably failed.");
        return;
    }
    
    for (id tracker in self.trackers) {
        if ([tracker conformsToProtocol:protocol]) {
            [((id<RITracker>)tracker).queue addOperationWithBlock:^{
                NSMethodSignature *signature = [[tracker class] instanceMethodSignatureForSelector:selector];
                NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
                [invocation setSelector:selector];
                
                for (NSUInteger idx = 0; idx < arguments.count; idx++) {
                    [invocation setArgument:(__bridge void *)(arguments[idx]) atIndex:idx];
                }
                
                [invocation setTarget:tracker];
                [invocation invoke];
            }];
        }
    }
}