是否可以将NULL传递给块参数?

当我在animateWithDuration:animations:completion:中将NULLnil传递给完成块时,iOS不会尖叫我animateWithDuration:animations:completion:但是这是否意味着没问题? 还是打开一个空的^{ }更好?

这是可以的,只要你可以相信你传递给它的代码不会试图把它称为一个块。

快速示范:

 typedef void (^GenericBlock)(void); void useThisBlock(GenericBlock block){ block(); } useThisBlock(^{NSLog(@"All okay.");}); useThisBlock(nil); // Compiles but crashes 

内部代码必须首先检查块: if( block ) block();

在UIKit代码的情况下,你应该没问题。

通过nil是好的,在我看来产生更清晰的阅读代码。

如果你不想使用完成块,对于这种情况你也可以使用[UIView animateWithDuration:animations:]方法。