i was reading through the sample code ListAdder, and there are many asserts right after the variable, or used in almost every method, for example :
self.formatter = [[[NSNumberFormatter alloc] init] autorelease];
assert(self.formatter != nil);
or :
- (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));
I was wondering, what's the point to do that?
Thanks
It is an implementation of Design by Contract, or DbC.
Objective C has no native support for the pre-conditions, post-conditions and invariants of DbC, but especially post- and preconditions can be implemented pretty well with macros.
Here are some other approaches to implement DbC in Objective C: