0

我想澄清目标 c 中委托和协议的概念。所以有两种类型的协议 1)正式 2)非正式

在正式委托的情况下..如果该人已经定义了协议方法但没有在两者中实际实现它怎么办。即 B 类是 A 的委托,A 有方法 WindowDidMove 作为可选...在这种情况下。会有什么行为???是否必须在 b 类中实现委托功能。我不能只在A中实现它并在我想要的任何地方使用它......相反,不要在A中定义它,并在B或C类或D类中给出单独的实现并使用它们但是我想要......请澄清这一点– @class A;

@protocol ADelegate <NSObject>
@optional

- (BOOL)A:(A *)foo doSumfin:(BOOL)decide;

@end

@interface A : NSObject {
NSString *bar;
id <ADelegate> delegate;
}

@property (nonatomic, retain) NSString *bar;

@property (nonatomic, assign) id <ADelegate> delegate;

- (void)someAction;

@end

另外,线是什么

id  <A Delegate > delegate; 

@property (nonatomic, assign) id <ADelegate> delegate;

帮助我们实现..

在非正式协议的情况下...如果我不提供方法的实现并仍然调用委托方法...会发生什么。?

4

1 回答 1

2

如果您调用委托未实现的委托方法,则会导致异常。对于可选的委托方法,您通常会通过首先检查委托是否响应它来检查委托是否实现它们:

if ([self.delegate respondsToSelector:@selector(someDelegateMethod:)]) {
    [self.delegate someDelegateMethod:self];
}

对于非正式协议,这不会以任何方式改变。不要将非正式协议与可选协议方法混淆。非正式协议通常只是一个NSObject类别,不应再真正使用。

于 2012-05-06T20:08:32.630 回答