작업 대기열 (_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
});
}
"[슈퍼 릴리스]"나는 (자체의 유지 수를 유지 키워드를 사용하여 '슈퍼') 자체를 유지하는 것 같아요 블록,있다. 나는 그것이 우아함 구현이 아니라 심지어 잘못된 것이라고 생각한다.
그런 다음 내 _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