showInView: метод для пользовательского UIView - PullRequest
0 голосов
/ 16 апреля 2011

Я создал пользовательский UIView с именем CustomMessage, который я использую в своей программе. Внешний вид CustomMessage анимирован, поэтому я написал метод в классе CustomMessage с именем showInView: для отображения вида. Например, скажем, что я хочу показать CustomMessage представление в конкретном контроллере представления - я бы использовал следующий код:

CustomMessage *myCustomMessage = [[CustomMessage alloc] initWithMessage:@"Hello"];

[myCustomMessage showInView:self.view];

Как видите, это очень похоже на то, как UIActionSheet создается и представляется.

Однако у меня проблемы с управлением памятью. Если я поставлю следующую строку кода, сразу после двух строк выше:

[myCustomMessage release];

тогда (как и ожидалось) программа завершится с ошибкой message sent to deallocated instance.

Я не уверен, что мне нужно делать в моем классе CustomMessage, чтобы я мог освободить объект сразу после вызова метода showInView:, чтобы не допустить утечки памяти. Очевидно, что это можно сделать, поскольку именно так работает UIActionSheet (но я просто не могу понять, как реализовать нечто подобное - я не могу понять, как объект CustomMessage может быть сохранен каким-то другим объект, предположительно self.view (в примере выше), который отображает CustomMessage, чтобы избежать полного освобождения объекта, пока он еще используется).

Все остальное работает отлично, за исключением этого небольшого аспекта, поэтому любая помощь будет принята с благодарностью:)

1 Ответ

2 голосов
/ 16 апреля 2011

Мне нужно увидеть ваш код для showInView: в CustomMessage.m.Я ожидаю, что это будет выглядеть примерно так:

- (void)showInView:(UIView *)view
{
    // pre-animation configuration
    [view addSubview:self];
    // do the animation
}

Это означает, что экземпляр CustomMessage сохраняется view.Кроме того, если ваша реализация showInView вообще использует параллелизм, возможно, он сразу же возвращается, позволяя освободить MyCustomMessage, а затем фоновые операции пытаются получить доступ к объекту освобождения.Я просто догадываюсь, не увидев ваш код.

Что такое журнал сбоя?Какое сообщение отправлено на какой объект, в каком контексте?Эта информация поможет локализовать проблему.

Если ничего из перечисленного не поможет вам решить проблему, опубликуйте свой код для showInView, а также подробности из журнала сбоев, и я еще раз посмотрю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...