Некоторые из ваших переменных автоматически высвобождаются, поэтому их нельзя освобождать (они будут высвобождены автоматически):
- data
- request
- url
- response
- err
- responseData
Плюс, идентификатор пользователя принадлежит другому объекту (theController)
Вы вызываете release только тогда, когдаВы вызываете
для переменной или любого методаначиная с copy / new (copyWithZone:, newWithFoo:) ...
Поэтому замените
[userID release];
[data release];
[request release];
[url release];
[userString release];
[response release];
[err release];
[responseData release];
на
[userString release];
, поскольку userString - единственная переменная, которую вы выделяетев явном виде.
Это решит проблему, и ваш объект не должен просачиваться.
Кроме того, контроллер, похоже, является переменной экземпляра, поэтому вы можете захотеть владеть им:
if ( [viewController isMemberOfClass:[profileViewController class]] ) {
theController = [(profileViewController *)viewController retain];
}
Или, если это свойство, синтезированное с помощью retain
if ( [viewController isMemberOfClass:[profileViewController class]] ) {
self.theController = (profileViewController *)viewController;
}
Вместо
if ( [viewController isMemberOfClass:[profileViewController class]] ) {
theController = (profileViewController *)viewController;;
}
(я только что понял, что у вас также есть дваточки с запятой в конце строки)
И добавьте в свой метод dealloc:
-(void) dealloc
{
//...release the other objects you have ownership on
[theController release];
[super dealloc];
}
Если вы новичок в Objective-C, возможно, вы захотите взглянуть на Документация Apple по управлению памятью (или любой ресурс по этой теме).Постарайтесь прочитать это внимательно, это не очень сложно, но самое запутанное, если вы не сделаете это правильно.