为什么点符号可用于返回块的方法

时间:2017-03-21 06:22:45

标签: ios objective-c

我最近学习了块,我写了一个返回块的函数,就像Masonry一样,

- (UIButton *(^)(NSString *title, UIControlState state))nj_buttonTitle {
    return ^UIButton *(NSString *title, UIControlState state) {
        [self setTitle:title forState:state];
        return self;
    };
}

然后,我可以在没有警告的情况下使用点表示法调用此方法。

UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
b.nj_buttonTitle(@"hello", UIControlStateNormal);

我也写了这样的方法

- (void)nj_print {
    NSLog(@"nj_print");
}

警告Property access result unused-getters should not be used for side effects,而我称这种方法使用点符号b.nj_print;

我猜是因为nj_buttonTitle返回一个块,我使用这个块,所以没有警告?

1 个答案:

答案 0 :(得分:0)

您的猜测是正确的 - nj_buttonTitle方法返回块,您的代码会立即调用它,因此在第一种情况下没有警告。

在第二种情况下,对于具有void返回类型的方法,您使用点语法。 Dot语法应该只用于Objective-C中的属性,因此编译器会警告您使用不正确。

相关问题