NSString сохранить копию вопроса - PullRequest
4 голосов
/ 19 февраля 2010

Я видел несколько постов о проблеме использования сохранения или копирования для строк.Я до сих пор не могу осмыслить разницу или важность.

В моем случае на данный момент у меня есть класс с целой загрузкой nsstrings для хранения строк.

Я хочуэтот класс создается только один раз, и я хочу, чтобы его переменные nsstring изменялись в зависимости от индекса, по которому щелкали в табличном представлении.

Правильно ли было бы сказать, что, если я выберу использование retain, мои nsstrings будут перезаписаныкаждый раз, когда я устанавливаю их значение в клике на табличном представлении, и что если я выберу копию, у меня будет как-то по 2 экземпляра каждой строки ....?

Извините ..... Я совершенно неполучить это

1 Ответ

6 голосов
/ 19 февраля 2010

Это вопрос о копировании изменяемых и неизменяемых объектов.Поскольку объекты NSString являются неизменяемыми (вы не можете изменять их содержимое), они реализуют -copy следующим образом:

- (id) copyWithZone: (NSZone *) zone
{
    return [self retain];
}

Если вы подумаете об этом, нет причин дублировать неизменяемый объект, поскольку это пустая трата памяти.С другой стороны, объекты NSMutableString могут видеть, как их содержимое изменяется в течение их времени жизни, поэтому, если вы запросите копию NSMutableString, вы получите реальную копию, другой объект.

Если ваши строки не являются NSMutableStrings, не имеет значения, сохраняете ли вы их или копируете.Тем не менее, выбор правильного метода важен, если впоследствии вы реорганизуете код для использования NSMutableStrings.Общая логика должна ответить на следующий вопрос для вас: если я получу объект, содержимое которого может измениться снаружи, какое значение мне нужно?Чаще всего вам захочется сделать копию.

...