Я пытаюсь понять, как работает ARC и NSHashTable weakObjectsHashTable. Объекты, которые я добавляю в хеш-таблицу, должны быть удалены/обнулены или чем-то еще, чем они становятся после освобождения объекта. Пример кода ниже в его NSLog показывает, что объект все еще существует в хэш-таблице. Что я делаю неправильно?
#import <Foundation/Foundation.h>
int main(int argc, char *argv[])
{
@autoreleasepool
{
NSHashTable *hashTable = [NSHashTable weakObjectsHashTable];
@autoreleasepool
{
NSString *str = @"Hello World!";
[hashTable addObject:str];
str = nil;
}
NSLog(@"hashTable:%@", [hashTable allObjects]);
// prints: hashTable:("Hello World!") – but should be empty?
}
}
string
— это особый случай, см. здесь stackoverflow.com/questions/10922888/ и вместо этого попробуйте версию с NSObject. - person JustAMartin   schedule 24.01.2017