i test in NSInvocation with ARC, but it trigger memory leaks. In MRC, it work well. i do not know why.
- (NSArray *)a:(NSString *)a b:(NSString *)b c:(NSString *)c
{
    return  @[a, b, c];
}
- (void)testNSInvocation
{
    NSMethodSignature *sig = [self methodSignatureForSelector:@selector(a:b:c:)];
    NSInvocation *inv = [NSInvocation invocationWithMethodSignature:sig];
    [inv setTarget:self];
    [inv setSelector:@selector(a:b:c:)];
    NSString *a = @"a", *b = @"b", *c = @"c";
    [inv setArgument:&a atIndex:2];
    [inv setArgument:&b atIndex:3];
    [inv setArgument:&c atIndex:4];
    [inv retainArguments];
    [inv invoke];
    NSArray *ret;
    [inv getReturnValue:&ret];//this is problem,but why?
    NSLog(@"ret:%@", ret);
}