iPhone dev - Как далеко я должен бросить? - PullRequest
1 голос
/ 21 августа 2009

Если у меня есть метод, который передает аргумент типа void * (анимация UIView остановила метод, должен быть указателем void) или типа id , и я знаю, что аргумент является Элемент UIBarButton, и мне нужно его отключить, [barbuttonitem setEnabled: NO] ;, я должен привести аргумент к UIControl, который позволяет использовать setEnabled (без предупреждения), или должен ли все это вплоть до UIBarButtonItem? Почему?

Спасибо !!

Ответы [ 4 ]

2 голосов
/ 21 августа 2009

Я бы сказал, приведите его к UIControl, на случай, если реализация изменится в какой-то момент. Я бы всегда приводил к наиболее подходящему интерфейсу (а не к реализации), и UIControl - это, вероятно, верный путь.

1 голос
/ 23 августа 2009

UIBarItem - это , а не , полученное из UIControl, поэтому приведение к UIControl действительно не является правильным решением. Это работает, потому что оба класса имеют setEnabled: методы.

Приведения - это просто другая форма документации; они не влияют на то, что происходит во время выполнения. Если вы ожидаете UIBarItem, используйте его как таковое.

0 голосов
/ 23 августа 2009

Если я правильно понимаю Objective-C, вы можете вызвать setEnabled непосредственно на объекте; Вы просто не получите гарантию, что звонок пройдет. Но если вы знаете , что возвращаемый объект является UIBarItem, то вы можете вызвать его.

0 голосов
/ 21 августа 2009

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

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