考虑:
[self.staves enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
HBStaffView * sv = (HBStaffView *) obj ;
[sv flush] ;
}] ;
和:
[self.staves enumerateObjectsUsingBlock:^(HBStaffView * sv, NSUInteger idx, BOOL *stop) {
[sv flush] ;
}] ;
两者都可以编译,并且都可以工作。
我知道我正在枚举的数组中有什么,因此编译器为我完成了正确类型的转换,以便将正确的类型直接传递给我,我需要如何使用它显然是一个福音。
有趣的是,这里的块签名是一个“C”语言签名,与选择器无关,并且(理论上)对对象一无所知,当然不是“id”是所有事物的超类(所以说话松散)。
嗯?注释?