I started using blocks a lot and soon noticed that nil blocks cause bus errors:
typedef void (^SimpleBlock)(void); SimpleBlock aBlock = nil; aBlock(); // bus
Caveat: I'm no expert in Blocks.
Blocks are objective-c objects but calling a block is not a message, although you could still try [block retain]ing a nil block or other messages.
[block retain]
nil
Hopefully, that (and the links) helps.