Короткий вариант заключается в том, что у меня есть протокол, который имеет необязательный параметр. Когда я создаю класс, который реализует его с iPhone SDK 3.x, он компилируется просто отлично, без ошибок или предупреждений. Когда я использовал 2.x SDK, я получил следующее предупреждение:Протоколы с дополнительными свойствами?
Class.m:68: warning: property 'field' requires method '-field' to be defined - use @synthesize, @dynamic or provide a method implementation
В обоих случаях он отлично работает.
Так два вопроса:
- Что такое правильный способ исправить это предупреждение? Я добавил
@dynamic
к реализации, которая не совсем корректна, так как свойства действительно нет. - Почему работает SDK 3.x, но не 2.x? В документах говорится: «В Mac OS X версии 10.5 протоколы не могут включать дополнительные объявленные свойства». Понятно, что здесь не совсем так.
Вот простой пример кода, который я должен сделать немного более очевидным, если бы не был полностью ясен.
@protocol MyProtocol
@required
- (void) method:(NSString*)param;
@optional
@property (nonatomic,retain) NSString* field;
@end
@interface MyClass : NSObject<MyProtocol> {
}
- (void) method:(NSString*)param;
@end
Я думаю, что ты прав. Знаете ли вы о предпочтительном способе устранения предупреждения? Или это просто случай «не делай этого» с помощью SDK 2.x? –
Ну, не делай этого или примирись с предупреждением. Это новая функция в SDK 3. – Chuck