Отвечаю ли я за выпуск URiew's gestRecognizer в dealloc? - PullRequest
6 голосов
/ 04 февраля 2011

Я подключил UIGestureRecognizer к UIView.Чья это ответственность, чтобы выпустить это во время dealloc?

В частности:

UITapGestureRecognizer *t = 
[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)];

[self.view addGestureRecognizer:t];
[t release];

Таким образом, self.view в настоящее время имеет единственное сохранение жеста Recognizer.

Обновление Я должен был быть более понятным.Мой вопрос имеет отношение к методу viewsloc.Обрабатывает ли суперкласс представления представление освобождения gestRecognizer при освобождении представления.В настоящее время я предполагаю, что это так.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Эмпирическое правило заключается в том, что вы звоните release всякий раз, когда звоните alloc, new или copy.

Так как вы вызвали alloc, ваш код не переусердствовал или ничего не вытек.* потому что явное освобождение объектов, где это возможно, улучшает управление памятью.(Автоматически освобожденные объекты не освобождаются до тех пор, пока пул автоматического выпуска не будет удален.)

2 голосов
/ 04 февраля 2011

Ваш код правильный.

Представление становится владельцем устройства распознавания жестов с помощью [self.view addGestureRecognizer:t].

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

UITapGestureRecognizer *t = [[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)] autorelease];
[self.view addGestureRecognizer:t];

Это будет означать, что все владения t обрабатываются в одном месте, что снижает вероятность возникновения проблем в случае модификации кода.

...