Объекты не освобождаются сразу. Вероятно, должен быть цикл выполнения цикла, прежде чем объекты действительно будут освобождены.
Тем не менее, вызов retainCount действительно подлый. Пожалуйста, прочтите почему: Когда использовать -retainCount?
РЕДАКТИРОВАТЬ: @ kris-van-bael прокомментировал этот ответ - правильно - что на основе документации это не так. Поэтому я должен четко заявить, что то, что я написал здесь, основано на тестировании этой проблемы на симуляторе iOS - и это не то, как все это должно работать. Однако, похоже, что следующий код будет работать без ошибок:
@interface Test : NSObject { }
@property (retain, nonatomic) NSString *test;
@end
@implementation Test
@synthesize test;
@end
Тогда где-нибудь в вашем коде напишите:
Test* t = [[Test alloc] init];
t.test = @"Test1";
NSLog(@"%@", t.test);
[t release];
t.test = @"Test2";
NSLog(@"%@", t.test);
Это (к сожалению) будет работать без ошибок на симуляторе iOS (хотя и выполняется его поэтапно при сбоях отладчика), так что в iOS есть определенная хитрость при освобождении объектов.