如果我知道我在数组中讲述的是什么类型的对象,最好在块枚举中输入它或不是吗?
而不是:
[myClassArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { }];
使用此:
[myClassArray enumerateObjectsUsingBlock:^(MyClass *obj, NSUInteger idx, BOOL *stop) { }];
答案 0 :(得分:1)
我个人总是在枚举方法的块参数中指定对象的类型。我会通过指定键的类型和值来为NsDictionary等效方法做同样的事情。
但是,如果我能确定集合中对象的类型,我只会这样做。
如果你没有在块参数中指定类型,那么你必须将id obj转换为块内的另一种类型,这是不必要的。
即使您无法确定集合中的对象类型(您几乎总是可以),我仍然希望对象具有参数中指定的类型,然后在其中确认使用NSAssert阻塞(以及在发布版本中安全地失败)。
还有其他语言能够以这种方式声明方法,以要求块中对象的类型与集合中的对象类型相同。由于Obj-C不允许这样做,我个人认为最好总是明确你希望在一个块中接收到的内容,例如你描述的那个。
答案 1 :(得分:0)
只要你没有重新分配阵列,你应该没问题。显然,设置支票以确保是否有任何疑问是更好的做法。 enumerateObjectsUsingBlock
的功能与for(MyClass *obj in myClassArray)
的功能相同,因此如果您想利用它的额外功能,则只能使用枚举方法。如果你在for循环环境中将对象描述为MyClass,那么你也可以在枚举中。