我正在阅读示例代码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 Contract或
DbC的实现.
目标C对DbC的前置条件,后置条件和不变量没有原生支持,但特别是后置和前置条件可以很好地实现宏.
> http://www.roard.com/contracts/
> http://lists.apple.com/archives/objc-language/2006/Sep/msg00000.html
> D programming language有DbC,这里的Michel Fortins尝试的是DbC的相同款式,但是对于Objective C:http://michelf.com/weblog/2010/dobjc-preliminary-design/