gpt4 book ai didi

objective-c - 了解示例代码中多次提到的委托(delegate)协议(protocol)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:14:56 26 4
gpt4 key购买 nike

我从 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 协议(protocol)的开始类(class)。第四个属性,id <SectionHeaderViewDelegate> delegate;符合协议(protocol)的类需要这样它们才能做类似 instanceOfClass.delegate = self; 的事情.

然后在 /* comment */ 之后,我不确定为什么再次使用协议(protocol)指令。它是同一协议(protocol)的一部分吗?和前半段宣布的协议(protocol)有什么不同吗?

我上面对代码的解释和理解是否正确?

最佳答案

其实是第一个protocol声明是解决先有鸡还是先有蛋问题的前向声明。委托(delegate)协议(protocol)的委托(delegate)类都需要相互了解,所以为了解决这个问题,我们声明 @protocol SectionHeaderViewDelegate;作为前向声明,它尚未定义,但它会在那里,您不必担心。这在您执行 id<SectionHeaderViewDelegate> delegate 时有效在SectionHeaderView类(class)。下一个@protocol声明是表示协议(protocol)定义的实际开始。

关于objective-c - 了解示例代码中多次提到的委托(delegate)协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com