Я подклассифицирую UIToolbar, потому что я буду использовать его во всем приложении. UIToolbar использует протокол делегата:issue with ivar
//
// UIToolbarCustom.h
//
#import <UIKit/UIKit.h>
@protocol UIToolbarCustomDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface UIToolbarCustom : UIToolbar {
id <UIToolbarCustomDelegate> delegate;
}
@property (strong, nonatomic) id delegate;
@end
Standford учитель курс развития IOS рекомендует явно объявить все Ивар префиксом с подчеркиванием, как:
@implementation UIToolbarCustom
@synthesize delegate = _delegate;
@end
Но в этом указать scenarion дает меня ошибка:
error: property 'delegate' attempting to use ivar '_delegate'...
код работает нормально, если я использую:
@synthesize delegate = __delegate; or
@synthesize delegate;
Что здесь происходит? Есть ли переменная частного экземпляра в классе UIToolbar с именем _delegate?
UPDATE
Спасибо все, что вы, ребята, для всех уточнений и protips, я многому учусь. Оказывается, что я новичок в разработке iOS (это моя первая вторая версия приложения, поэтому я пытаюсь сделать это правильно = p). После кончиков я вышел с этим новым файлом заголовок:
//
// Toolbar.h
//
#import <UIKit/UIKit.h>
@protocol ToolbarDelegate
@required
- (void)tab:(UIBarButtonItem *)sender;
- (void)ok:(UIBarButtonItem *)sender;
@end
@interface Toolbar : UIToolbar
@property (strong, nonatomic) id delegate;
@end
Примечание:
Приставка класса была удалена.
Объявление делегата было удалено (я использую код учебника делегата ios, но пример кода использует старую версию xcode, где требуется объявление).
Синтез был удален, я также не знал, что нам больше не нужно синтезировать наши свойства.
PS: Очевидно, что код не работает, так как проблема с ivar. Я собираюсь изменить свои имена, так что мне не нужно, чтобы синтезировать его, не зная о том, что имя для использования в любом случае ...
Совет. Когда вы подклассифицируете класс UIKit, измените префикс от пользовательского интерфейса на любой префикс, который вы используете для своих собственных классов. Это облегчает определение ваших собственных занятий сразу, делает более правдоподобным именование вещей (например, вы можете использовать * LLToolbar * вместо * UIToolbarCustom *), и (что наиболее важно), это позволяет избежать того, что Apple добавит класс с то же имя. Избегание конфликтов имен является основной причиной того, что префиксы используются в первую очередь. – Caleb
Спасибо за отзыв, я сделаю это! – lolol