Вопрос

Я думаю, что не заканчиваю, чтобы понять все о памяти и об этом, но это моя проблема:

У меня есть переменная, определенная 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] Прежде чем назначить эти новые значения? Если вы, прокомментируйте эту строку и посмотрите, решает ли это ваша проблема. Метод автоматического сгенерированного сеттера выпустит старое значение для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top