НЕ ЗВОНИТЕ dealloc
. Позвоните release
на url
и urlString
вместо.
Это потому, что другие объекты имеют ссылки на эти объекты, и когда вы говорите dealloc
, вы явно уничтожаете их. Это вызывает EXC_BAD_ACCESS
, потому что когда другие объекты пытаются получить доступ к объектам url и string, они уже уничтожены.
Вот и весь смысл подсчета ссылок. Вы сделали с этими объектами, поэтому, если вы скажете:
[url release];
[urlString release];
Вы заявляете об этом. Это уменьшает количество ссылок на эти объекты. Но наверху вы сказали:
NSURL* url = [[NSURL alloc] initWithString:urlString];
Это означает, что url
, вероятно, имеет ссылку на эту строку. Так что это бы retain
отредактировало его, когда вы его создали. Поэтому после того, как вы отпустите строку, она не будет уничтожена, поскольку url
все еще имеет ссылку на нее. Когда ИТ-отдел покончит с ним, он тоже освободит его, а затем (если никто больше не претендует на объект) автоматически изменится на dealloc
, потому что его счетчик упадет до нуля.
Всегда имейте в виду, кто еще может использовать ваши объекты, когда вы имеете дело с такого рода управлением памятью. Вы можете прочитать больше об этом в Документах Apple .