Действительно ли это - ошибка звонить dealloc
на a UIViewController
от фонового потока? Это кажется этим UITextView
(может?) в конечном счете звонят _WebTryThreadLock
который приводит к:
bool _WebTryThreadLock (bool): Попробованный для получения веб-блокировки из потока кроме основного потока или веб-потока. Это может быть результатом вызова к UIKit от вторичного потока.
Фон: у Меня есть разделенный на подклассы NSOperation
это берет a selector
и a target
объект уведомить.
-(id)initWithTarget:(id)target {
if (self = [super init]) {
_target = [target retain];
}
return self;
}
-(void)dealloc {
[_target release];
[super dealloc];
}
Если UIViewController
был уже отклонен когда NSOperation
находит время для выполнения, затем вызов к release
триггеры это dealloc
на фоновом потоке.
Простое правило состоит в том, что выполнение чего-либо в пользовательском интерфейсе *
из фонового потока является ошибкой.
Во втором посте здесь была полезная информация, но их ответ не сработал для меня.
UIWebView в многопоточном ViewController
Кажется, это также было решено в iPhone OS 4, но не уверен.
Я закончил тем, что не освобождал свой UIWebView в dealloc контроллера, когда [NSThread isMainThread] был НЕТ. Лучше утечка, чем крах (пока я не найду лучшего решения).
Вызов функции dealloc для чего-либо в любое время является ошибкой. Вы должны только когда-либо призывать релиз.
Вы не должны обращаться к каким-либо экземплярам, связанным с пользовательским интерфейсом, из фонового потока. Это включает использование методов получения, потому что они могут изменять вещи внутри. Однако операции сохранения и освобождения являются потокобезопасными для любого объекта в любое время, если соблюдаются обычные правила сохранения и освобождения. Экземпляры, связанные с пользовательским интерфейсом, включают любой объект, на который ссылается активный UIView или UIViewController.
performSelectorOnMainThread не делает ничего, кроме сохранения объекта, пока он не попадет в основной поток. Можно безопасно вызывать любой объект, связанный с пользовательским интерфейсом.