вопрос о подпредставлении сохранить суперпредставление в объективе-C - PullRequest
0 голосов
/ 19 октября 2010

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

Скажем, у меня есть представление A, у него есть указатель, указывающий на его подпредставление B. Я использую @property(nonatomic, retain), ссылаюсь на представление B.

Теперь в подпредставлении B мне нужен указатель, чтобы указать на его суперпредставление A. Поэтому я использую другой @property(nonatomic, retain), ссылающийся на его суперпредставление A.

Вот мое беспокойство, я прочитал статью Держи меня, используй меня, освобождай меня о том, как сохранить и выпустить вещи в цели c.В нем упоминается «удержание циклов» .Таким образом, он говорит, что подпредставлению не нужно сохранять свое суперпредставление, на самом деле оно будет избыточным, если оно это сделает.Значит ли это, что в моем примере подпредставлению B нужно использовать только @property(nonatomic), относящемуся к его суперпредставлению A?Спасибо!

Кстати, если я не написал retain в @property для представления A, нужно ли мне [viewA release] в методе dealloc?

Ответы [ 3 ]

3 голосов
/ 19 октября 2010

У каждого подпредставления уже есть указатель на его суперпредставление.Управляется классом NSView.Смотри -[NSView superview].Таким образом, вы можете просто использовать [self superview] или self.superview и полностью игнорировать управление памятью.

Если вы хотите продолжить работу по какой-либо причине, вам нужно будет указать, что свойство superview является свойством assign.чтобы избежать предупреждения.Вы также не выпустили бы его в -dealloc, потому что никогда не сохраняли его.

Проще говоря: подпредставления не имеют своих суперпредставлений.

Если вы программируете для iOS, просто заменитеNSView с UIView и перечитать.

0 голосов
/ 19 октября 2010

Ваш UIView не должен нуждаться в UIViewController. Что ты пытаешься сделать? Если вы еще этого не сделали, прочитайте документы Apple по стилю Model-View-Controller.

0 голосов
/ 19 октября 2010

Теперь в подпредставлении B мне нужен указатель, чтобы указать на его суперпредставление A.

У вас уже есть один.Используйте [self superview].

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