gpt4 book ai didi

objective-c - 为什么在项目中使用 'assert'? (以及为什么多次使用它)

转载 作者:太空狗 更新时间:2023-10-30 03:42:03 25 4
gpt4 key购买 nike

我正在阅读示例代码 ListAdder,并且在变量之后有很多断言,或者几乎在每个方法中都使用,例如:

self.formatter = [[[NSNumberFormatter alloc] init] autorelease];
assert(self.formatter != nil);

或:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
#pragma unused(tv)
#pragma unused(indexPath)
UITableViewCell * cell;

assert(tv == self.tableView);
assert(indexPath != NULL);
assert(indexPath.section < kListAdderSectionIndexCount);
assert(indexPath.row < ((indexPath.section == kListAdderSectionIndexNumbers) ? [self.numbers count] : 1));

我想知道,这样做有什么意义?

谢谢

最佳答案

它是 Design by Contract 的一个实现, 或 DbC .

Objective C 没有对 DbC 的前置条件、后置条件和不变量的原生支持。 , 但尤其是后置条件和前置条件可以用宏很好地实现。

这里有一些其他的方法来实现 DbC在 Objective-C 中:

关于objective-c - 为什么在项目中使用 'assert'? (以及为什么多次使用它),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7677853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com