При включенном ARC (XCode 4.3.2, iOS 4.0) _CFAutoreleasePoolPrintPools() не печатает адрес токена ни в одном пуле. Я проверил, что токен высвобождается, как и ожидалось, после завершения пула, поэтому проблем нет, но что-то происходит за кулисами. Я подозреваю, что это может быть связано с objc_autoreleaseReturnValue.
@autoreleasepool {
NSMutableString *token = [NSMutableString string];
// When following line uncommented,
// **token** is listed in autorelease pool by _CFAutoreleasePoolPrintPools.
//[token appendFormat:@"%@", @"xyz"];
NSLog(@"%@", token);
}
Итак, разве _CFAutoreleasePoolPrintPools() не надежен? Как токен может быть выпущен автоматически, если он не указан ни в одном пуле автоматического выпуска?
Редактировать: Когда я наконец выяснил причину и определил, что она уже указана в списке, appendFormat не должен работать по-другому. Кажется, что при вызове appendFormat адреса памяти находились в диапазоне ([1..F]XXX XXXX), поэтому _CFAutoreleasePoolPrintPools точно перечисляет эти адреса, и я мог найти адрес при поиске.