This:
- (void) setFoo:(NSString*) bar {
[foo release];
foo = [bar retain];
}
should be: - (void) setFoo:(NSString*) bar {
if(bar == foo)
return;
[foo release];
foo = [bar retain];
}
so that you can do without crashing: obj.foo = obj.foo;