Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 代表和议定书目标_Objective C_Xcode_Delegates_Protocols_Concept - Fatal编程技术网

Objective c 代表和议定书目标

Objective c 代表和议定书目标,objective-c,xcode,delegates,protocols,concept,Objective C,Xcode,Delegates,Protocols,Concept,我想在目标c中澄清委托和协议的概念。 所以有两种类型的协议 1) 正式的 2) 非正式的 如果是正式代表。。如果此人已经定义了协议方法,但没有在这两种方法中实际实现它,该怎么办。i、 e类B是A的委托,A的方法WindowDidMove是可选的……在这种情况下。会有什么样的行为???并且必须在类b中实现委托函数。我不能在一个简单的环境中实现它,并在任何我想要的地方使用它吗。。。相反,不要在A中定义它,在B或C类或D类中给出单独的实现,并按照我的意愿使用它们。。。请澄清这一点—— @甲级 @pro

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

如果是正式代表。。如果此人已经定义了协议方法,但没有在这两种方法中实际实现它,该怎么办。i、 e类B是A的委托,A的方法WindowDidMove是可选的……在这种情况下。会有什么样的行为???并且必须在类b中实现委托函数。我不能在一个简单的环境中实现它,并在任何我想要的地方使用它吗。。。相反,不要在A中定义它,在B或C类或D类中给出单独的实现,并按照我的意愿使用它们。。。请澄清这一点—— @甲级

@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
@protocol-ADelegate
@可选的
-(BOOL)A:(A*)foo doSumfin:(BOOL)decision;
@结束
@接口A:NSObject{
NSString*条;
id代表;
}
@属性(非原子,保留)NSString*条;
@属性(非原子,赋值)id委托;
-(无效)某些行为;
@结束
还有,线路是什么

id  <A Delegate > delegate; 

@property (nonatomic, assign) id <ADelegate> delegate;
id代表;
@属性(非原子,赋值)id委托;
帮助我们实现


如果是非正式协议。。。如果我没有给出方法的实现,但仍然调用委托方法。。。会发生什么事

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

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

这在非正式协议中不会发生任何变化。不要混淆非正式协议和可选协议方法。非正式协议通常只是一个
NSObject
类别,不应该再使用了。

如果是正式协议,请编辑答案以解释场景2。。如果我在不同的类中为单个可选方法提供单独的实现会怎么样?如果我在protocol类中提供实现,并且希望在其他任何地方都使用它,会怎么样。请澄清这一点