Closed luwu1991 closed 8 years ago
(void)_trimToCost:(NSUInteger)costLimit { BOOL finish = NO; OSSpinLockLock(&_lock); if (costLimit == 0) { [_lru removeAll]; finish = YES; } else if (_lru->_totalCost <= costLimit) { finish = YES; } OSSpinLockUnlock(&_lock); if (finish) return;
NSMutableArray holder = [NSMutableArray new]; while (!finish) { if (OSSpinLockTry(&_lock)) { if (_lru->_totalCost > costLimit) { _YYLinkedMapNode node = [_lru removeTailNode]; if (node) [holder addObject:node]; } else { finish = YES; } OSSpinLockUnlock(&_lock); } else { usleep(10 * 1000); //10 ms } } if (holder.count) { dispatch_queue_t queue = _lru->_releaseOnMainThread ? dispatch_get_main_queue() : YYMemoryCacheGetReleaseQueue(); dispatch_async(queue, ^{ [holder count]; // release in queue }); } }
这段代码,最后释放数组的时候,调用数组的count方法,怎么会就释放了数组了呢?
https://github.com/ibireme/YYCache/issues/4
(void)_trimToCost:(NSUInteger)costLimit { BOOL finish = NO; OSSpinLockLock(&_lock); if (costLimit == 0) { [_lru removeAll]; finish = YES; } else if (_lru->_totalCost <= costLimit) { finish = YES; } OSSpinLockUnlock(&_lock); if (finish) return;
NSMutableArray holder = [NSMutableArray new]; while (!finish) { if (OSSpinLockTry(&_lock)) { if (_lru->_totalCost > costLimit) { _YYLinkedMapNode node = [_lru removeTailNode]; if (node) [holder addObject:node]; } else { finish = YES; } OSSpinLockUnlock(&_lock); } else { usleep(10 * 1000); //10 ms } } if (holder.count) { dispatch_queue_t queue = _lru->_releaseOnMainThread ? dispatch_get_main_queue() : YYMemoryCacheGetReleaseQueue(); dispatch_async(queue, ^{ [holder count]; // release in queue }); } }
这段代码,最后释放数组的时候,调用数组的count方法,怎么会就释放了数组了呢?