В вашем примере выделенная ячейка будет автоматически освобождена, потому что вы отправили объекту сообщение автоматического освобождения.Так что вам не нужно беспокоиться об освобождении памяти - это произойдет автоматически.
Что касается вашего второго вопроса, в общем, вам не следует звонить напрямую в dealloc.Система вызывает Deloc для вас, когда количество сохраняемых объектов становится равным нулю.Вы должны прочитать следующую статью, которая хорошо объясняет управление памятью в очень ясной форме: http://interfacelab.com/objective-c-memory-management-for-lazy-people/.
У определенного кода, который вы разместили, есть две проблемы.Во-первых, исходя из того, что я сказал выше, dealloc следует заменить вызовом release.Во-вторых, у вас действительно есть утечка памяти: когда вы выделяете объект dataArray, он получает счетчик сохранения 1. Но вы назначаете его свойству, определенному с помощью атрибута «retain».Таким образом, установщик этого свойства снова сохранит объект, увеличив его счетчик до 2. Когда вы, наконец, отпустите, он вернется к 1, но не к нулю, поэтому он не будет освобожден.
Чтобы исправить это, вместо назначения выделенного объекта свойству, назначьте его переменной экземпляра, поддерживающей свойство.По умолчанию переменная экземпляра будет иметь то же имя, что и свойство, поэтому вы просто делаете
dataArray = [[NSArray alloc] initWithObjects:@"XXX",@"YYY",@"ZZZ",nil];
Если вы явно дали переменной экземпляра имя при синтезировании свойства (выполнив что-то вроде @synthesize dataArray = _dataArray
, затем используйте это имя.
Другой вариант, который у вас есть, это не выделять / инициализировать массив, а использовать метод класса arrayWithObjects в NSArray . Объект, который вы получите от этого, будетавтоматически выпущен, так что вам не нужно беспокоиться об управлении им.