Iphone 可以将NULL传递给块参数吗?

Iphone 可以将NULL传递给块参数吗?,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,当我将NULL或nil传递到animateWithDuration:animations:completion:中的完成块时,iOS不会对我尖叫,但这是否意味着它没事?还是打开一个空的^{}更好?通过nil就可以了,在我看来,读取代码更干净 如果您不想使用完成块,在这种情况下,您也可以使用[UIView animateWithDuration:animations:方法。只要您相信传递nil的代码不会尝试将其作为块调用,这是可以的 快速演示: typedef void (^GenericBloc

当我将
NULL
nil
传递到
animateWithDuration:animations:completion:
中的完成块时,iOS不会对我尖叫,但这是否意味着它没事?还是打开一个空的
^{}
更好?

通过
nil
就可以了,在我看来,读取代码更干净


如果您不想使用完成块,在这种情况下,您也可以使用
[UIView animateWithDuration:animations:
方法。

只要您相信传递
nil
的代码不会尝试将其作为块调用,这是可以的

快速演示:

typedef void (^GenericBlock)(void);

void useThisBlock(GenericBlock block){
    block();
}

useThisBlock(^{NSLog(@"All okay.");});
useThisBlock(nil);    // Compiles but crashes
内部代码必须首先检查块:
if(block)block()


对于UIKit代码,您应该可以。

谢谢,我知道有一种方法没有动画块。我的问题更多的是关于区块本身。那么为什么
nil
,而不是
NULL
nil
NULL
是等价的。按照惯例,Objective-C通常使用
nil
,其中
NULL
在C中使用。这在ARC中并不完全正确
nil
表示对象,必须在需要
id
的地方使用,而
NULL
表示非对象无效指针,必须在需要
(void*)
的地方使用。请看问题了解更多信息。“就UIKit代码而言,您应该没问题。”需要引用?@Manav:您没有错——无法验证(除非它不会崩溃)。