Вот мой код:Любой способ сделать dispatch_queue_t работать в одном потоке?
@interface MyObject()
@property(nonatomic) dispatch_queue_t queue;
@end
@implementation MyObject {
NSThread *_check;
}
- (id)init {
self = [super init];
if (self) {
_queue = dispatch_queue_create("com.Thread.queue", NULL);
dispatch_async(_queue, ^{
_check = [NSThread currentThread]; //for ex. thread number = 3
//some code here...
});
}
return self;
}
- (void)someMethod:(MyObjClass *)obj {
dispatch_async(_queue, ^{
//need th
if (_check != [NSThread currentThread]) { // it is sometimes number 3, but sometimes it changes
NSLog(@"Thread changed.");
}
[obj doSmth]; //got crash if currentThread != _check
});
}
@end
мне нужно, чтобы убедиться, что методы всех MyObjClass игрового выполняют в том же потоке. Но этот код меняет поток по своей воле, но иногда он работает в одном потоке. В любом случае я могу заставить его использовать ту же самую нить все время?
Thx, это именно то, что я искал. Также стоит упомянуть - он работает на 10% медленнее, чем образец с GCD. – Kirow
Да, GCD довольно оптимизирован. Я удивлен, что штраф составляет * только * 10%. – ipmcc