Я получил этот код из одного из примеров Apple:
@protocol SectionHeaderViewDelegate;
@interface SectionHeaderView : UIView {
}
@property (nonatomic, retain) UILabel *titleLabel;
@property (nonatomic, retain) UIButton *disclosureButton;
@property (nonatomic, assign) NSInteger section;
@property (nonatomic, assign) id <SectionHeaderViewDelegate> delegate;
-(id)initWithFrame:(CGRect)frame title:(NSString*)title section:(NSInteger)sectionNumber delegate:(id <SectionHeaderViewDelegate>)aDelegate;
-(void)toggleOpenWithUserAction:(BOOL)userAction;
@end
/*
Protocol to be adopted by the section header's delegate; the section header tells its delegate when the section should be opened and closed.
*/
@protocol SectionHeaderViewDelegate <NSObject>
@optional
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionOpened:(NSInteger)section;
-(void)sectionHeaderView:(SectionHeaderView*)sectionHeaderView sectionClosed:(NSInteger)section;
@end
Я запутался в некоторых обозначениях. Это моя попытка объяснить это. Пожалуйста, поправьте меня, если я ошибаюсь:
Первый @protocol SectionHeaderViewDelegate;
объявляет начало протокола для класса SectionHeaderView
. Четвертое свойство, id <SectionHeaderViewDelegate> delegate;
, необходимо для классов, которые соответствуют протоколу, поэтому они могут делать что-то вроде instanceOfClass.delegate = self;
.
Затем после /* comment */
я не уверен, почему директива протокола используется снова. Это часть того же протокола? Отличается ли он от протокола, объявленного в первой половине?
Правильно ли мое объяснение и понимание кода выше?