Вопрос

Я работаю над приложением для 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, что правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top