2010-10-05 4 views
0

Так сказать, я получаю результаты от моего запроса данных ядра: (это пример кода)Еще один Управление памятью IPhone Вопрос

На кнопку пресс-конференции он делает:

NSMutableArray *results = [[myContext executeFetchRequest:request error:&error] mutableCopy]; 
myObject = (MyObject *)[mutableFetchResults1 objectAtIndex:0]; // assume that there's something in there 

Теперь я хочу myObject, чтобы некоторое время оставаться в моей программе ... т.е. информация, содержащаяся в «myObject», будет использоваться в других событиях и т. д. Поэтому я определил его в файле .h.

Вопрос в том, как мне управлять памятью в этом случае. Нужно ли мне «выпускать» результаты или myObject в какой-то момент? Инструменты говорят, что это утечка ... Но вы видите какие-то проблемы здесь?

ответ

1

Вы можете просто сделать сохранить на объекте 0 индекса из результатов так:

myObject = [(MyObject *)[mutableFetchResults1 objectAtIndex:0] retain]; 

И тогда вы могли бы выпустить результаты сразу после того, MyObject будет торчать. Затем вам нужно будет также выпустить myObject.

+0

ОК, но почему мне нужно освобождать результаты ... не выпускает ли он автоматически (я думал, что мне нужно только «освободить», если я сделаю выделение или новое или что-то в этом роде), иначе это будет автореализован? – foreyez

+1

Вы берете на себя ответственность за объект, если его создаете, используя метод, имя которого начинается с «alloc» или «new» или содержит «copy» (например, alloc, newObject или mutableCopy), или если вы отправляете ему сообщение сохранения , См. Http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH –

+0

не шутите, вот что я сказал .. i спросил, почему мне нужно выпустить результаты. я не взял на себя ответственность за это. – foreyez

1

mutableCopy (и копирует) возвращает объект со счетом сохранения 1 - вы являетесь владельцем возвращенного объекта. поэтому вы должны выпустить результаты в какое-то время.

myObject сохраняется массивом результатов. вам не нужно явно выпускать его, поскольку вы не являетесь его владельцем.

Если вас интересует только объект myObject, я бы сохранил его и опубликовал результаты как можно скорее.

+0

да, меня интересует только myObject. поэтому я сохраняю его, и после этого я выпускаю результаты. НО мне все еще нужно освободить myObject! (так же, как сказал BP) .. вы говорите, что неправильно выпускать myObject ?? – foreyez

+0

Пожалуйста, не говорите: «mutableCopy и copy возвращают объект с сохранением числа 1». Это не обязательно так. Вы должны просто сказать: «у вас есть собственность на возвращенный объект, и поэтому его следует отпустить позже». – JeremyP

+0

Если вы не сохранили myobject, вы не должны его выпускать. если вы сохраните его, то вы должны его освободить. - это так просто. это не особый случай. – jsz

Смежные вопросы