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

前端之家收集整理的这篇文章主要介绍了objective-c – 为什么在项目中使用’assert’? (以及为何多次使用它)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读示例代码ListAdder,并且在变量之后有很多断言,或者几乎在每个方法中使用,例如:

self.formatter = [[[NSNumberFormatter alloc] init] autorelease];
断言(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 ContractDbC的实现.

目标C对DbC的前置条件,后置条件和不变量没有原生支持,但特别是后置和前置条件可以很好地实现宏.

以下是在Objective C中实现DbC的一些其他方法

> http://www.roard.com/contracts/
> http://lists.apple.com/archives/objc-language/2006/Sep/msg00000.html
> D programming languageDbC,这里的Michel Fortins尝试的是DbC的相同款式,但是对于Objective C:http://michelf.com/weblog/2010/dobjc-preliminary-design/

猜你在找的C&C++相关文章