Выпуск пользовательского класса NSObject в приложении iOS - PullRequest
2 голосов
/ 30 августа 2010

У меня есть класс, который я создал как объект NSObject. Этот класс имеет ряд свойств разных типов и методы и т. д.

Когда я создаю экземпляр этого класса в своем приложении (скажем, в главном View Controller), я немедленно отправьте сообщение об отпускании, когда я закончу его использовать. а именно:

MyObject *myObject = [[MyObject alloc] initWithParameters:parms];
[myObject doSomeMethodCall];
[myObject release];

Итак, мой вопрос: Когда я освобождаю myObject, он автоматически освобождает все объявленные объекты, переменные и т. Д. что я объявил в файле MyObject .h?

OR

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

Я спрашиваю из-за проблем с управлением памятью.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 30 августа 2010

Вам необходимо реализовать метод dealloc в своем объекте и использовать этот метод для освобождения любых имеющихся у вас ресурсов.

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW4

- (void)dealloc {
    [mainSprocket release];
    [auxiliarySprocket release];
    [super dealloc];
}

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

0 голосов
/ 25 октября 2011

У меня была та же проблема, что и Zigglzworth, и это была позиция вызова [super dealloc]. У меня было это в начале моего -(void)dealloc метода, и каждый раз это вызывало сбой. Перемещено [super dealloc] в конец метода после операторов освобождения переменной, и теперь оно работает просто отлично.

0 голосов
/ 30 августа 2010

В конце концов, он вызовет метод dealloc для myObject. В методе dealloc myObject вы должны освободить все переменные экземпляра, которые есть в myObject. Кроме того, не забудьте [super dealloc]

0 голосов
/ 30 августа 2010

С iPhone - когда вызывается dealloc для контроллера представления? :

Dealloc будет работать, когда последний ссылка на объект была освобожден.

поэтому, когда вы отпустите объект, он запустит dealloc. Поэтому поместите все ваши релизы и тому подобное в метод dealloc вашего объекта.

...