2010-08-20 2 views
1

Я знаю, что если я получу объект, например NSArray, с таким методом, как [NSArray array], он будет автореализован. Поэтому я не должен сам делать release. Мой вопрос в том, должен ли я сохранить его после того, как получится так? Я бы так и не подумал, так как счет начинается с 1, и он не будет выпущен до тех пор, пока пул не будет выпущен, но я получил несколько ошибок доступа к этим объектам, когда я этого не сделаю. Поэтому, чтобы исправить их, я сохраняю эти объекты, а потом освобождаю их позже. Что происходит в этом случае? Неужели я все еще не понимаю целевое управление памятью?Objective-C static "constructors" - мне нужно сохранить?

+0

Как побочное примечание, то, что вы называете «статическими» конструкторами, часто называют фабричными методами в земле Objective-C. –

ответ

3

Я сердечно советую вам перестать думать о количестве накоплений. Вместо этого подумайте о собственности: хотите ли вы претендовать на кусок собственности на экземпляр (т. Е. Вы хотите убедиться, что он остается вокруг, пока вы не скажете иначе)? Если да, то -retain это. В противном случае, не -retain это. В любое время, когда вы сохраняете права собственности на экземпляр, вы должны -release, которые заинтересованы в будущем, или экземпляр никогда не будет освобожден.

Вы можете предположить, что любой метод, который не соответствует шаблону alloc/new/copy, возвращает экземпляры, в которых у вас не имеют право собственности. Если вы хотите, чтобы они придерживались рамки текущего стека, сохраните их.

Для этого и всех других вопросов памяти Objective-C читайте Memory Management Programming Guide. Затем перечитайте его. Еще раз. Это авторитетная ссылка на эту тему. Это будет ваш друг.

0

Автореализованный объект будет иметь счет сохранения, уменьшенный в конце цикла цикла. Поэтому, если у вас есть объект, который вы хотите сохранить дольше, чем конец цикла цикла, да, вы должны его сохранить.

0

Вы не сохраняете, если вам не требуется заявить права собственности на объект. Вам нужно опубликовать какой-либо код или описать, что вы делаете, прежде чем кто-либо сможет помочь вам определить, как и почему вы получаете ошибки.

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