Что происходит с памятью объектов, используемых в NSMutableDictionary при освобождении массива? - PullRequest
0 голосов
/ 22 сентября 2011

Мне интересно, что происходит с памятью объектов, которые я нажимаю [array addObject:object], когда я использую [array release]

  • копирует ли указатель addObject указатели?
  • делаетЯ должен сохранить объекты?
  • я должен сделать для и освободить каждый объект, а затем массив?

Ответы [ 4 ]

1 голос
/ 22 сентября 2011

Когда вы делаете [array addObject: object], массив сохраняет объект, который вставлен в массив.Чтобы избежать утечек памяти, не забудьте освободить исходный объект, который был вставлен, иначе объект, вставляемый в массив, будет иметь счет сохранения 2 вместо 1:

SomeClassObject *obj = [[SomeClassObject alloc] init];
[array addObject:obj];
[obj release];

Поскольку массиввладеет объектами, которые находятся внутри массива (содержит указатель на этот объект и сделал сохранение, как объяснено ранее), когда вы освобождаете массив, массив знает об освобождении любых объектов, которые находятся внутри него.Работа сделана для вас!

1 голос
/ 22 сентября 2011

Когда вы звоните

[array addObject:object] 

array, удерживает object, увеличивая тем самым свой счет удержания.

Позже, когда array отправляется сообщение dealloc, онозвонки release на object.

Чтобы избежать утечек памяти, вам, возможно, придется разблокировать object после добавления его в array, например,

NSObject *object = [[NSObject] alloc] init];
[array addObject:object];
[object release];

Убедитесь, чтоВы просматриваете Руководство по программированию управления памятью , чтобы быть уверенным, что вы не преувеличиваете или не выпускаете object.

1 голос
/ 22 сентября 2011

addObject сохраняет объект, который вы добавляете. И когда вы освобождаете массив, он автоматически вызывает release для всех объектов, которые он содержит.

0 голосов
/ 22 сентября 2011

NSArrays сохраняют добавленные объекты, поэтому вам не нужно добавлять дополнительные, сохраняя себя, и вы можете просто освободить массив, когда закончите.

...