Когда освободить объект, добавленный в NSMutableDictionary
-
21-09-2019 - |
Вопрос
Я работаю над приложением для iPhone, которое будет создавать во время выполнения NSMutableDictionary, для которого значения (пары ключ-значение) будут NSMutableArrays.Будучи новичком в Objective-C, я обеспокоен тем, что следующее приведет к утечке памяти:
- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
supplierPhotoArray = [[NSMutableArray alloc] init];
[supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
[supplierPhotoArray release];
}
}
ПоставщикФото — это NSMutableDictionary, который является переменной-членом содержащего его класса.
Как вы можете видеть, когда я принимаю новый UIImage* для помещения в структуру, я сначала проверяю, равен ли объект в паре ключ-значение, соответствующей второму аргументу (supplierID), нулю.Если он равен нулю, я выделяю новый NSMutableArray и устанавливаю его как объект для этого ключа, а затем отпускаю его.Предполагая, что я освободил NSMutableDictionary в освобождении класса, содержащего этот метод, будут ли освобождены ссылки?Прежде чем освободить NSMutableDictionary, нужно ли мне пробежаться по нему и освободить отдельные NSMutableArrays, содержащиеся внутри?
Спасибо,
Бен Б.
Решение
когда вы добавляете объекты в контейнер, такой как словарь или массив, функция сохранения будет вызываться автоматически, а когда вы освобождаете контейнер в качестве словаря вашего вопроса, он вызывает «выпуск» каждого объекта, чтобы освободить память объекта.
Другие советы
мне такое управление памятью кажется правильным.Вы освобождаете одну выделенную копию, и массив содержит еще одну ссылку, как только вы добавляете к нему, поэтому чистый счетчик равен 1, что правильно.