Когда я освобождаю объект? - PullRequest
       34

Когда я освобождаю объект?

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

В одной из моих функций у меня есть цикл while с определенным случаем, когда может потребоваться временно создать объект. Мой код выглядит так:

while(c < end){
    if(specialCase){
        Object *myObject = [Object alloc];
        //do stuff with myObject
        //I tried [myObject dealloc] here, but it crashed when this method was called.
    }
    c++;
}

Код работает как есть, но меня беспокоит утечка памяти. Я хотел бы знать, если и как я должен иметь дело с myObject.

Ответы [ 4 ]

5 голосов
/ 19 сентября 2011

Вы НИКОГДА не вызываете Dealloc напрямую.

вы вызываете Release, и когда количество сохраняемых записей достигает 0, DELLLOC будет вызываться для объекта.

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

Вы не должны вызывать dealloc метод напрямую . Вызов release для объекта, который либо alloced, либо retain вызовет dealloc implicity, если сохранит счет для этого объект удовлетворяет условию, поставленному системой iOS ( Обычно , если счетчик сохранения равен ZERO для объекта).

Прочитайте документацию Apple о методе dealloc в классе NSObject , а также ознакомьтесь с Руководством по программированию управления памятью для target-C

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

Возможно, вы можете попробовать использовать Smart Pointer. Это должно заботиться о сборке мусора и любой обработке исключений. Также библиотеки Boost могут быть портированы для ios.

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

попробуйте это

while(c < end){
if(specialCase){
Object *myObject = [[Object alloc] autorelease];
    //do stuff with myObject
    //I tried [myObject dealloc] here, but it crashed when this method was called.
}
c++;

}

...