Я начинающий программист ObjectiveC из мира C ++. Мне очень трудно понять управление памятью, предлагаемое NSObject: /
Скажем, у меня есть следующий класс:
@interface User : NSObject
{
NSString* name;
}
@property (nonatomic,retain) NSString* name;
- (id) initWithName: (NSString*) theName;
- (void) release;
@end
@implementation User
@synthesize name
- (id) initWithName: (NSString*) theName
{
if ( self = [super init] )
{
[self setName:theName];
}
return self;
}
- (void) release
{
[name release];
[super release];
}
@end
Не учитывая следующий код, я не могу понять результаты сохранения:
NSString* name = [[NSString alloc] initWithCString:/*C string from sqlite3*/];
// (1) name retainCount = 1
User* user = [[User alloc] initWithName:name];
// (2) name retainCount = 2
[whateverMutableArray addObject:user];
// (3) name retainCount = 2
[user release];
// (4) name retainCount = 1
[name release];
// (5) name retainCount = 0
В (4) количество сохраненных имен уменьшилось с 2 до 1. Но это не правильно, в массиве все еще есть экземпляр user, который указывает на имя!
Число сохраняемых переменных должно уменьшаться только тогда, когда число сохраняющих ссылающихся переменных равно 0, то есть когда оно отменено, не освобождено.