2011-01-28 1 views
0

вот еще один вопрос новичков.Использование ASIHTTPRequest из внешнего класса

Я хочу назвать ASIHTTPRequest из внешнего класса (потому что я уже использую его в своем основном классе), и я сделать что-то вроде этого:

ASIHTTPNSFabExt *nRequest = [[ASIHTTPNSFabExt alloc]init]; 

nRequest.URL = @"http://something"; 
nRequest.var1 = [dictionaryRecord objectForKey:@"something"]; 
nRequest.var2 = [dictionaryRecord objectForKey:@"something"]; 
[nRequest saveComment]; 

Где saveComment методы выполнения задач ASIHTTPRequest.

Все работает нормально, за исключением случаев, когда я пытаюсь выполнить [nRequest release] внутри моего основного класса, который будет генерировать ошибку в методах ASIHTTPRequest.

Сохранять счет до моего выпуска 1, и автореферат тоже не работает. Я уверен, что мне не хватает оснований управления памятью, но можете ли вы помочь мне найти правильный способ манипулировать им?

Thanx заранее

Фабрицио

ответ

0

Там нет ничего явно не так с кодом вы публикуемую до сих пор. Возможно, проблема связана с обработкой ссылки на объект ASIHTTPRequest в методах init/dealloc в ASIHTTPNSFabExt.

У вас нет ничего особенного в том, чтобы обернуть ASIHTTPRequest в пределах другого класса Objective-C - просто убедитесь, что вы сохраняете/освобождаете объект в правильных точках и не используете его после того, как вы его выпустили.

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

Сначала включите NSZombies; проверьте консоль /, где приложение остановится, вы почти наверняка найдете сообщение об ошибке «Сообщение отправлено на освобожденный объект» и обратную трассировку, которая показывает, какая именно строка кода пыталась отправить это сообщение.

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

- Edit -

Также стоит отметить, что вы должны убедиться, что вы удалите делегат из ASIHTTPRequest в методе dealloc, в противном случае он мог бы попытаться назвать свой класс после того, как оно было высвобождено - request.delegate = nil; или [request clearDelegatesAndCancel]; ,

+0

Я не уверен, что полностью понимаю ваш ответ, но я думаю, что последняя часть является проблемой, потому что я не удаляю делегата ASIHTTPRequest, и я думаю, что он называет их основанием nRequest выпущен. Я не вижу, какая часть кода генерирует «освобожденный объект», это метод внутри ASIHTTPRequest, но я не могу его понять. В любом случае THANX – Fabrizio

+0

Чтобы закрыть эту тему, я думаю, что исправил использование [nRequest сохранить], а затем [nRequest release]. Кажется, это работает. Thanx – Fabrizio

 Смежные вопросы

  • Нет связанных вопросов^_^