Поскольку код не вызывает метод установки свойства dPath
, он просто устанавливает переменную экземпляра dPath
напрямую:
dPath = [[documentPaths objectAtIndex:0] stringByAppendingPathComponent:kDatabaseName];
[dPath retain];
Поэтому его необходимо сохранить вручную.
Вы сможете (на самом деле вам нужно) пропустить вызов retain
, если установщик свойств использовался следующим образом (обратите внимание на self.
):
self.dPath = [[documentPaths objectAtIndex:0] stringByAppendingPathComponent:kDatabaseName];
или таким образом (уведомлениеsetDPath:
):
[self setDPath:[[documentPaths objectAtIndex:0] stringByAppendingPathComponent:kDatabaseName]];
Сеттер оставляет за собой NSString
, поэтому вам не придется делать это самостоятельно.
Хорошая небольшая практика, которой нужно следоватьчтобы избежать путаницы, добавьте подчеркивание к вашему имени ивара, чтобы указать, что это ивар:
NSString *dPath_;
Затем синтезируйте свое свойство следующим образом, чтобы связать его с вашим по-разному иваром:
// self.dPath is the property, dPath_ is the ivar
@synthesize dPath = dPath_;
Затем измените ваш метод dealloc
, а также любой другой код, который напрямую ссылается на экземпляр var, чтобы использовать вместо него добавленное имя:
- (void)dealloc {
[dPath_ release];
[super dealloc];
}