Может установить ноль, но не к другому
-
26-10-2019 - |
Вопрос
Я думаю, что не заканчиваю, чтобы понять все о памяти и об этом, но это моя проблема:
У меня есть переменная, определенная Idactual для представления, которая будет натолкнута (VAR определяется в его заголовке), я могу читать (nslog (idactual)) и установить ее без проблем. Но когда я меняю его значение, я получаю ошибку CFString, что это должно быть из -за плохого управления памятью, я попробовал это:
Я могу сделать это: nextView.idactual = nil;
Я не могу этого сделать:
a) nextView.idActual = @"1";
b) NSString *str = [NSString stringWithFormat:@"1"];
nextView.idActual = str;
c) NSString *str = [[NSString alloc] initWithFormat:@"1"];
nextView.idActual = str;
[str release];
A, B и C Всегда дайте мне ошибку CFString: *** -[CFString IsequaltoString:]: сообщение отправлено в экземпляр Deallocated
Решение
Похоже, что CFString (NSString), который содержится в nextView.idActual
уже был выпущен, когда вы пойдете, чтобы изменить значение. Если вы можете опубликовать больше связанного кода, это поможет.
Я предполагаю это idActual
объявлен как @property(nonatomic,retain)
. Анкет Когда вы пытаетесь установить новое значение в idActual
, метод сеттера для этого свойства называется (возможно, что установщик был автоматически сгенерирован). Первое, что делает метод сеттера, - это попытаться сравнить старое значение и новое значение - и затем он сбой.
Когда этот метод сеттера пытается сравнить новое значение со старым значением, он сталкивается с неприятностями, потому что старое значение уже складывается.
Вы звоните [nextView.idActual release]
Прежде чем назначить эти новые значения? Если вы, прокомментируйте эту строку и посмотрите, решает ли это ваша проблема. Метод автоматического сгенерированного сеттера выпустит старое значение для вас.