NSURLConnectionDelegateretainCount выходит из-под контроля

У меня есть объект NSURLConnectionDelegate, обрабатывающий некоторые сообщения SOAP. По сути, я устанавливаю несколько значений свойств, а затем вызываю метод, который создает запрос xml и затем отправляет его на сервер. Объект также является NSXMLParserDelegate, поэтому он может анализировать ответы xml от сервера и соответствующим образом обрабатывать данные.

При использовании объекта я сначала устанавливаю значения для ряда свойств. Счетчик сохранения после по-прежнему равен единице. Затем я вызываю свой первый метод, и тут начинается самое интересное. Каждый раз, когда вызывается пользовательский метод или метод NSURLConnectionDelegate, счетчик сохранения увеличивается на 1. При вызове методов NSXMLParserDelegate этого не происходит. После того, как все коммуникации завершены, и я закончил с объектами, которые он удерживает, подсчитайте его 43. Освобождение объекта не уменьшает количество удержаний, поэтому я получаю объект, который я не могу освободить. Кроме того, объект работает так, как ожидалось.

Существует много кода, и я не совсем уверен, что имеет значение, поскольку на самом деле не похоже, что что-либо, что я делаю внутри методов, вызывает увеличение continueCount. Единственное, что стоит упомянуть, это то, что я вызываю эти методы из фонового потока, но выполняю их в основном потоке:

[tEditor performSelectorOnMainThread:@selector(requestQueueList) withObject:nil waitUntilDone:YES];

person Kris    schedule 08.05.2012    source источник
comment
Могло ли так случиться, что вы переопределили свои NSURLConnectionDelegate release ? Я имею в виду, что performSelectorOnMainThread должен автоматически сохранять как объект, так и аргумент до тех пор, пока селектор не будет выполнен, но затем они также должны автоматически освобождаться. Если ваш метод выпуска пуст, количество сохранений будет только расти.   -  person A-Live    schedule 08.05.2012
comment
Ха-ха, черт возьми, я чувствую себя идиотом. У меня был один из моих параметров, NSString, с именем release. Поменял, все работает как надо. Большое спасибо, я ненавижу, когда упускаю из виду что-то вроде этого.   -  person Kris    schedule 08.05.2012
comment
Круто, я думаю, вы должны опубликовать это как ответ и принять для дальнейшего использования.   -  person A-Live    schedule 08.05.2012


Ответы (1)


Оказывается, я назвал синтезированное свойство «релиз» и непреднамеренно перезаписал метод выпуска объекта. Ой!

person Kris    schedule 08.05.2012
comment
Боже мой, не могу поверить, что компилятор хотя бы не предупредил об этом! - person jscs; 08.05.2012