You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用含完成处理程序参数的方法时,无需使用该参数应传nil还是NULL?

在Objective-C中处理未使用的Completion Handler参数

首先明确一个核心点:在Objective-C里,绝大多数Completion Handler都是block类型,而block在ARC环境下属于Objective-C对象范畴,这种情况下你应该传入nil,而不是NULL。

为什么要区分?虽然底层实现上nil和NULL在某些场景下可能表现相似,但它们的语义完全不同:

  • nil是Objective-C对象的空值,专门用于表示“不存在的Objective-C对象”;
  • NULL是C语言指针的空值,针对的是普通C指针(比如int *、char *这类)。

举个实际的例子,比如UIKit里的动画方法:

[UIView animateWithDuration:0.3 animations:^{
    // 动画逻辑
} completion:nil]; // 这里传nil是标准写法

如果传NULL,虽然很多时候编译器不会报错,但这属于不符合编码规范的写法——因为API期望的是一个Objective-C block对象,用nil才是语义匹配的选择。

那有没有需要传NULL的情况?如果某个方法的Completion Handler是C风格的函数指针(而非Objective-C block),这时候传NULL才是正确的,但这种情况在Objective-C的API里非常少见,绝大多数Completion Handler都是block类型。

总结一下:

  • 若Completion Handler是Objective-C block类型:传nil
  • 若Completion Handler是C函数指针类型:传NULL

内容的提问来源于stack exchange,提问作者mdb29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:57:31