Чтобы закрыть поток, просто return
из метода потока.Но не забудьте позвонить [pool release];
(пожалуйста, используйте также вместо [pool drain];
в конце вашего метода; на iOS, где нет GC, они одинаковы, но если Apple однажды решит добавить поддержку GC, они 'все по-другому).
Так что-то вроде этого:
if (wantToCloseThread) {
// Release everything we've allocated.
[pool release];
// Also, if you alloc'ed something that is not autoreleased
// you should release it here.
return;
}
Альтернативой является использование goto
(да, его использование для этого в порядке):
- (void) thread {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
...
if (something)
goto out;
...
if (somethingElse)
goto out;
...
out:
// Cleanup.
[pool release];
// Also, if you alloc'ed something that is not autoreleased
// you should release it here.
}
Таким образом, вы должны написать очистку только один раз, и goto гарантирует, что каждый раз, когда вы действительно хотите покинуть поток, завершается полная очистка.