Я понимаю, что любой метод init ... инициализирует новый объект и что NSString stringWithString создает копию строки параметра как новый объект. Я также понимаю, что, будучи владельцем объектов, я могу контролировать освобождение / освобождение любых объектов, которые я выделяю. Что я не понимаю, так это когда я буду использовать метод stringWithString, поскольку любая локальная переменная, назначенная таким образом, будет иметь свою «память», принадлежащую NSString, вместо локального класса.
Книга "Программирование в Objective C" Кочана (1-е изд) использует следующий код (см. Стр. 342-344), чтобы объяснить, что initWithString предпочтительнее stringWithString, поскольку класс AddressCard будет владеть содержимым переменной name. Также я не получаю никаких ошибок при повторных вызовах версии setName с помощью метода stringWithString. ТИА !!
//header file has appropriate declarations but not included here:
#import "AddressCard.h"
@implementation AddressCard;
-(NSString *) name
{
return name;
}
//Recommended code:
-(void) setName: (NSString *) theName
{
[name release]
name = [[NSString alloc] initWthString: theName];
}
//Incorrect code according to Kochan:
-(void) setName: (NSString *) theName
{
[name release]
name = [NSString stringWthString: theName];
}
//rest of class implementation code snipped
@end