在Objective-c中,我应该使用啥来返回该参数不能为零?

Posted

技术标签:

【中文标题】在Objective-c中,我应该使用啥来返回该参数不能为零?【英文标题】:In Objective-c what I should use to return that parameter can't be nil?在Objective-c中,我应该使用什么来返回该参数不能为零? 【发布时间】:2014-04-30 11:13:19 【问题描述】:

我知道我可以通过 NSError 或抛出 NSException 返回该参数不能为 nil,但是在 Objective-c 中通知该参数不能为 nil 的最佳选择是什么?

【问题讨论】:

【参考方案1】:

文档。

在开发过程中使用断言引发异常。

也返回一个NSError(尽管希望在您投入生产时它永远不会发生)。

【讨论】:

【参考方案2】:

您可以使用NSAssert(),它只会在未定义NS_BLOCK_ASSERTIONS 的构建中触发:

- (void)someMethodWithParam:(id)someParam 
    NSAssert(someParam, @"someParam cannot be nil");
    ...

这将几乎限制您和其他开发人员进行检查,但如果您希望它持续存在,无论构建如何,那么NSException 是最好的:

- (void)someMethodWithParam:(id)someParam 
    if (!someParam) 
        [NSException raise:@"MyException" format:@"someParam cannot be nil"];
    
    ...

【讨论】:

NSParameterAssert 在这里更合适【参考方案3】:

在编译时检查使用

__attribute__ with nonnull

例如,第一个和第二个参数不能为空:

extern void * my_memcpy (void *dest, const void *src, size_t len) 
__attribute__((nonnull (1, 2)));

nonnull 属性指定某些函数参数应该 是非空指针。使用非空编码对值的期望 进入明确的合同,这可以帮助捕获任何 NULL 指针错误 潜伏在任何调用代码中。记住:编译时错误≫运行时 错误。

阅读更多here

【讨论】:

以上是关于在Objective-c中,我应该使用啥来返回该参数不能为零?的主要内容,如果未能解决你的问题,请参考以下文章

我想在反应中缓存图像,我应该使用啥来存储

在 iOS7 中,我应该使用啥来代替已弃用的 GKLeaderboardViewController?

我应该使用啥来提高性能。查看/查询/临时表

iOS - 我应该使用啥来保存数据

我应该在 Math.max(...arr) 中使用啥来代替 Chrome 的扩展运算符?

在从 C++ 转换为 C# 的代码中,我应该使用啥来代替 memcpy?