検討:
[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」言語の署名であり、オブジェクトについて (理論的には) 何も知らないということです。大雑把に話します)。
うーん?コメント?