Давайте рассмотрим приложение с сильно настраиваемыми или сложными представлениями.
У нас будет определенный тип методов отправки контроллера представления для определенного типа UIView, где UIView сам состоит из ряда других представлений.
Представление должно иметь богатый интерфейс, зависящий от предметной области, позволяющий контроллеру действовать как тонкий «склеивающий» слой между ним и такой же богатой моделью.
Итак, мы переопределяем свойство представления нашего контроллера следующим образом:
@interface PlaybackViewController : UIViewController<StageLayoutDelegate, ControlPanelDelegate>
{
NSMutableArray* _sections;
LightingMode _lightingMode;
}
@property (nonatomic, strong) PlaybackView* view; // <------ Specific type of view
#pragma mark - injected
@property (nonatomic, strong) id<OscClient> oscClient;
@property (nonatomic, strong) AbstractStageLayoutView* stageLayoutView;
@end
Переопределение имеет смысл по сравнению с определением другого метода доступа, и я могу просто отправлять сообщения определенному типу UIView без необходимости приведения.
Проблема. Единственная проблема заключается в том, что это приводит к предупреждению компилятора:
тип свойства PlaybackView * несовместим с типом UIView *, унаследованным от UIViewController
. . и мне нравится создавать код без предупреждений. Таким образом, действительное предупреждение не будет пропущено, будучи похороненным среди других предупреждений.
Вопрос:
- Есть ли способ подавить это конкретное предупреждение?
- Почему это часть настроек по умолчанию, когда большинство современных объектно-ориентированных языков с радостью позволяют переопределить свойство или метод в подклассе, чтобы он возвращал более конкретный подкласс типа, объявленного в суперклассе?
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wgnu" //YOUR CODE #pragma clang diagnostic pop
или -Wall - person Andrea   schedule 05.05.2014