编辑:如果您希望委托回调在主线程上发生,请使用此模式:[delegate performSelectorOnMainThread:@selector(threadDidSomething:) withObject:self waitUntilDone:NO]
干得好。我相信这是不言自明的,但如果不是,请告诉我。请注意:我只是根据API编写了这段代码,但没有测试过,所以要小心。
@protocol ThreadLogicContainerDelegate <NSObject>
- (void)threadLogicContainerDidStart:(ThreadLogicContainer*)theThreadLogicContainer;
- (void)threadLogicContainerDidFinish:(ThreadLogicContainer*)theThreadLogicContainer;
@end
@interface ThreadLogicContainer
- (void)doWorkWithDelegate:(id<ThreadLogicContainerDelegate>)delegate;
@end
@implementation ThreadLogicContainer
- (void)doWorkWithDelegate:(id<ThreadLogicContainerDelegate>)delegate
{
@autoreleasepool
{
[delegate threadLogicContainerDidStart:self];
// do work
[delegate threadLogicContainerDidFinish:self];
}
}
@end
@interface MyDelegate <ThreadLogicContainerDelegate>
@end
@implementation MyDelegate
- (void)threadLogicContainerDidStart:(ThreadLogicContainer*)theThreadLogicContainer
{}
- (void)threadLogicContainerDidFinish:(ThreadLogicContainer*)theThreadLogicContainer
{}
@end
示例用法:
ThreadLogicContainer* threadLogicContainer = [ThreadLogicContainer new];
[NSThread detachNewThreadSelector:@selector(doWorkWithDelegate:)
toTarget:threadLogicContainer
withObject:myDelegate];
参考:http: //developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html