Способ управления памятью в Objective-C работает, когда вы получаете право собственности на объект путем выделения / инициации, -сохранения или -копирования его, и вы закрываете его, когда он больше не нужен через -release или -autorelease. *
То, что вы хотите сделать, это:
1) Создать объект данных
NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imageurl]];
Теперь у вас есть объект, на который указывает imgData.
2) Добавьте этот объект в свой дочерний словарь
[childDictionary setObject:imgData forKey:@"imgData"];
3) Отклонить объект данных. Тебе это больше не нужно. childDictionary нуждается в этом, но это не ваша проблема. childDictionary, как и любой другой объект, отвечает за управление собственной памятью и владением.
[imgData release];
Другой способ сделать это - создать автоматически выпущенную версию объекта данных и добавить ее в словарь.
Далее вам необходимо убедиться, что вы правильно управляете памятью childDictionary
и cache
. Например:
1) Создать автоматически выпущенный childDictionary
NSMutableDictionary *childDictionary = [NSMutableDictionary dictionary];
2) Добавить материал в childDictionary (как мы делали раньше)
3) Добавить childDictionary в кеш
[cache setObject:childDictionary forKey:yourKey];
4) Поскольку childDictionary был создан с автоматическим выпуском, вам не нужно (и не нужно) выпускать его сейчас, когда он вам не нужен. Это будет автоматически выпущено основным пулом автоматического выпуска позже. Если вы создали свой childDictionary с помощью:
NSMutableDictionary *childDictionary = [[NSMutableDictionary alloc] init];
, который возвращает объект с retainCount
, равным 1, тогда вам нужно было бы сейчас отказаться от владения:
[childDictionary release];
Что касается кеша, вы, вероятно, захотите сохранить его в течение длительного времени: это, скорее всего, переменная экземпляра любого объекта, который управляет кешем, и он сбрасывается с помощью [cache removeAllObjects]
при нажатии на предупреждение о памяти. 1038 *
Если вы разрабатываете на Mac с использованием сборки мусора, все это бесполезно. Но поскольку вы разговариваете по телефону, вам необходимо знать эти простые правила управления памятью. Мое объяснение действительно упускает из виду многие концепции, с которыми вы должны быть знакомы, поэтому я настоятельно рекомендую вам прочитать документацию Apple об этом .