Я создал кое-что в своей операционной очереди (_opQueue), и я хочу также отпустить их в этой очереди. Вот мой код, _opQueue была создана форма «dispatch_queue_create» («Data_Serial_Operation_Queue», DISPATCH_QUEUE_SERIAL);Как выпустить мои объекты в определенной очереди?
@implementation CrowdPot
- (void) dealloc {
[_queryString release],_queryString = nil;
[_sortedItems release],_sortedItems = nil;
objc_setAssociatedObject(_indexesDictionary, ctIndexDictionaryTypeKey, nil, OBJC_ASSOCIATION_ASSIGN);
[_indexesDictionary release],_indexesDictionary = nil;
[super dealloc];
}
- (id)init
{
self = [super init];
if (self)
{
dispatch_sync(_opQueue, ^{
_sortedItems = [[NSMutableArray alloc] initWithCapacity:128];
_indexesDictionary = [[NSMutableDictionary alloc] initWithCapacity:28];
_initialRange = NSMakeRange(NSNotFound, 0);
_needRefill = YES;
});
}
return self;
}
- (oneway void)release
{
dispatch_async(_opQueue, ^{
[super release];//revise
});
}
В методе освобождения я использую «[супер-релиз]» в блоке, который я думаю, может сохранить себя (используя ключевое слово «супер» сохранить сохранить кол SELF в). Я думаю, что это не элегантность и даже неправильная.
Затем, как написать метод выпуска, если я хочу выпустить эти данные в моем _opQueue? Это еще один способ сделать это в этом случае, кто-нибудь поможет?
Вот способ публикации данных в определенном потоке, который я получил из Интернета.
-(oneway void)release{
//ensure dealloc occurs on our _addressBook thread
//we do this to guarantee that we are removed from the weak cache before someone else ends up with us.
if (_addressBookThread && ![[NSThread currentThread] isEqual:_addressBookThread]) {
[self performSelector:_cmd onThread:_addressBookThread withObject:nil waitUntilDone:NO];
} else {
[super release];
}
}
А? <- Это все, что я могу сказать. Счет сохранения объекта не имеет ничего общего с потоками. Просто отпустите их, как обычно. – borrrden