Можно установить на ноль, но не на другую вещь - PullRequest
0 голосов
/ 05 сентября 2011

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

У меня есть переменная, определенная idActual в представлении, которое будет выдвинуто (var определено в его заголовке), я могу прочитать (NSLog (idActual)) и установить его равным nil без проблем. НО, когда я изменяю его значение, я получаю ошибку 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:]: сообщение отправлено освобожденному экземпляру

1 Ответ

0 голосов
/ 05 сентября 2011

Похоже, что CFString (NSString), содержащийся в nextView.idActual, уже был освобожден, когда вы собираетесь изменить значение. Если вы сможете опубликовать больше соответствующего кода, это поможет.

Я предполагаю, что idActual объявлено как @property(nonatomic,retain). Когда вы пытаетесь установить новое значение в idActual, вызывается метод установки для этого свойства (возможно, он был создан автоматически). Первое, что делает метод установки, - это пытается сравнить старое и новое значения, а затем происходит сбой.

Когда этот метод установки пытается сравнить новое значение со старым значением, он сталкивается с проблемой, поскольку старое значение уже освобождено.

Вы звоните [nextView.idActual release], прежде чем назначить эти новые значения? Если да, закомментируйте эту строку и посмотрите, решит ли это вашу проблему. Метод сгенерированного автоматически установит для вас старое значение.

...