可以将 NULL 传递给块参数吗?
Posted
技术标签:
【中文标题】可以将 NULL 传递给块参数吗?【英文标题】:Is it okay to pass in NULL to a block parameter? 【发布时间】:2011-12-19 23:50:38 【问题描述】:当我将NULL
或nil
传递到animateWithDuration:animations:completion:
的完成块时,ios 不会对我大喊大叫,但这是否意味着没关系?还是开个空的^
比较好?
【问题讨论】:
【参考方案1】:只要您可以相信您传递nil
的代码不会尝试将其作为块调用,就可以了。
快速演示:
typedef void (^GenericBlock)(void);
void useThisBlock(GenericBlock block)
block();
useThisBlock(^NSLog(@"All okay."););
useThisBlock(nil); // Compiles but crashes
内码必须先检查区块:if( block ) block();
如果是 UIKit 代码,应该没问题。
【讨论】:
"如果是 UIKit 代码,应该没问题。" 需要引用吗? @Manav:你没看错——没有办法验证(除非它不会崩溃)。【参考方案2】:传递nil
很好,在我看来会产生更清晰的代码。
如果您不想使用完成块,对于这种情况,您也可以使用[UIView animateWithDuration:animations:]
方法。
【讨论】:
谢谢,我知道有没有动画块的方法。我的问题更多是关于块本身。那么为什么是nil
,而不是NULL
?
nil
和 NULL
是等价的。按照惯例,Objective-C 通常使用 nil
,而 C 中使用 NULL
。
这在 ARC 中并不完全正确。 nil
表示对象,必须在需要id
的地方使用,而NULL
表示非对象无效指针,必须在需要(void *)
的地方使用。请查看this 问题以获取更多信息。以上是关于可以将 NULL 传递给块参数吗?的主要内容,如果未能解决你的问题,请参考以下文章
问: js要传string型参数,可以直接将变量用toString()方法转换吗?