EXEC_BAD_ACCESS, когда я пытаюсь освободить строку NSString, для которой выделен адрес - PullRequest
0 голосов
/ 03 августа 2011

У меня есть строка NSString, которую я пытаюсь выпустить.

Проблема в том, что в некоторых случаях я получаю EXC_BAD_ACCESS, когда пытаюсь выпустить его. Для NSString выделен адрес (я вижу на нижней странице, что он выделил память в 0xABCDEF).

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

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Вы можете освободить объект, но указатель на него все еще может иметь значение. Просто значение мусора (то есть висячий указатель ).

Вот почему вы видите много кода, такого как:

[myObject release];
myObject nil;

, который сначала освобождает объект, а затем устанавливает указатель на nil. Таким образом, любое сообщение, отправленное на него, будет молча терпеть неудачу (потому что отправлять сообщения в nil объекты в Objective-C безопасно), а не падать, как это, кажется, происходит с вашим приложением.

Поскольку вы проверяете указатель, я подозреваю, что вы делаете что-то странное с управлением памятью. Не. Просто следуйте Правилам управления памятью и освобождайте только те объекты, которые вам принадлежат.

1 голос
/ 03 августа 2011

Вы, вероятно, вызвали [release] для уже освобожденной строки. Как вы это распределяете? Когда объект освобождается или автоматически освобождается, для него автоматически не устанавливается ноль (0x0).

[[NSString alloc] initWithSomething] требуется выпуск вызова.

[NSString stringWithSomething] по соглашению не освобождается автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...