Написание собственной фотогалереи для iPad - ошибка dealloc - PullRequest
0 голосов
/ 06 января 2011

Я хочу написать свою собственную фотогалерею, как оригинальный "Photos.app" от Apple. Я создал UITabbarcontroller в AppDelegate, а затем «ImageViewController» и «VideoViewController».

В «ImageViewController» я добавил UIScrollView, а затем создал экземпляр моей собственной «Фотогалереи» с различными свойствами, такими как imagePerRow, изображения, отступы и т. Д.

Для «Фотогалереи» я создал новый класс target-c как подкласс «NSObject», где я позиционирую все различные изображения как кнопки UIB. Затем я добавил еще одну функцию, которая описывает расположение всех изображений, когда ориентация устройства изменилась. И деаллок-функция. Вот и все.

Этот класс отлично работает, а также перестановка, когда ориентация устройства изменилась. Проблема заключается в том, что если я имитирую предупреждение о памяти в ios-симуляторе, то в первый раз PhotoGallery корректно получает освобождение, но если я имитирую предупреждение снова, я получаю сообщение об ошибке: «[выпуск PhotoGallery]: сообщение отправлено в освобожденный экземпляр ».

Я думал, что это из-за подкласса как NSObject, верно? Затем я проверил это как UIView. С той же ошибкой. Так знай, я не знаю, что делать дальше. Надеюсь, вы понимаете, в чем проблема, и дадите мне несколько советов по этому поводу .. Подумайте о вызове функции init снова? Как? Нужен "drawRect"? Я понятия не имею.

Спасибо за ваше время и помощь, Г.

1 Ответ

1 голос
/ 06 января 2011

Вы, вероятно, не устанавливаете свойство, которое содержит ссылку на фотогалерею, равным nil.

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

плохой пример:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
}

безопасный (r) пример:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
    photoGallery = nil;

    // or combine both actions if your property attributes are set up to accommodate it:
    // self.photoGallery = nil;
}

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

В безопасном (r) примере, photoGalleryравен нулю, и отправка сообщения на ноль безопасна.

...