Как я могу удалить все executeSelector: withObject: afterDelay :? - PullRequest
15 голосов
/ 21 января 2010

Я столкнулся с EXC_BAD_ACCESS при освобождении объекта, у которого есть несколько performSelector:withObject:afterDelay, где методы селектора вызывают другой объект, и я освобождаю объект ...

// где-то в моем классе я звоню

[self performSelector:@selector(callObject1Function) withObject:nil afterDelay:2.0];


- (void)callObject1Function{
   [object1 function1]  // Here i am getting "EXC_BAD_ACCESS"
}

- (void)dealloc {
 [object1 release];
 [super dealloc];
}

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

Ответы [ 2 ]

27 голосов
/ 21 января 2010

Использование NSObject s:

-cancelPreviousPerformRequestsWithTarget:selector:object: 

для отмены любых ожидающих селекторов исполнения.

23 голосов
/ 28 декабря 2012

Я использовал следующий код во всех своих приложениях, и он работает.

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(MethodName) object:nil];

Спасибо, Hemang.

...