Самый быстрый и безопасный способ сделать это - добавить @synthesize value
в начало вашей реализации, и компилятор автоматически сгенерирует эти методы.
Проблема копирования против сохранения зависит от того факта, что вы можете быть переданы в NSMutableString, что изменит его значение. Если у вас есть установщик для «неизменяемого» типа (строка, набор, массив, словарь), вам необходимо использовать семантику copy
. Поначалу это может показаться нелогичным (зачем делать копию, если она неизменна?), Но нужно понимать, что ваш класс хочет предположить, что она неизменна, а то, что передано, может и не быть неизменным.
Классы NSMutable реализуют селектор copy
, возвращая неизменную версию того, что они представляют. Неизменяемые классы (NSString и т. Д.) Реализуют copy
с вызовом retain
. То есть они очень быстрые.
Ваш сеттер также должен сбросить value
, прежде чем присваивать ему новое значение. Правильный код:
-(void)setValue:(NSString*)newvalue
{
if (value != newvalue)
{
[value release];
value = [newvalue copy];
}
}
Если у вас есть полный контроль над всеми классами, которые могут вызывать setValue:
, и вы абсолютно уверены, что не передадите NSMutableString, вы можете использовать retain
, но рекомендуется использовать copy
.