Personally I would always specify the type of the object in the block parameters of the enumerate method. And I would do the same for the NsDictionary equivalent method, by specifying the type of the key and the value.
I would, however, only do this if I can be certain of the types of the objects in the collection.
If you don't specify the type in the block parameters, then you will have to cast the id obj to another type inside the block, which is afaiac unnecessary.
Even if you can't be certain of the type of object in your collection (which you almost always can be), I would still prefer the object to have a type specified in the parameters and then confirm it inside the block with an NSAssert (and an if to fail safely in release builds).
There are other languages out there that provide the ability to declare methods in such a way to demand the type of object in the block was the same type as the objects in the collection. Since Obj-C doesn't allow this, I personally think it's better to always be explicit about what you expect to receive in a block such as the one you described.