Objective c 委托方法是私有声明的吗?

Objective c 委托方法是私有声明的吗?,objective-c,cocoa-touch,delegates,Objective C,Cocoa Touch,Delegates,在我的视图控制器的viewDidLoad方法中,我创建了一个NSURLConnection 您可以看到我将委托设置为self 然后我实现了委托方法 -(void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) reponse { //myImplementation; } 此实现仅在@implementation ViewController@end块中定义,未在ViewCon

在我的视图控制器的viewDidLoad方法中,我创建了一个NSURLConnection

您可以看到我将委托设置为self

然后我实现了委托方法

-(void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) reponse {
   //myImplementation;
}
此实现仅在@implementation ViewController@end块中定义,未在ViewController的@interface中声明

所以我猜这个方法是私有的?它编译和运行良好。但是我不能像ViewController自己的方法中的[self-connection:connection-didReceiveResponse:response]那样调用这个方法


解释是什么?

这些方法是通过在类的接口定义中包含来声明的:

@interface MyViewController : UIViewController <NSURLConnectionDelegate>

这告诉编译器,您的类承诺实现该协议的所有必需方法,并且它可能会实现可选方法,因为该协议只有可选方法。因此声明是公开存在的,它们只是在另一个文件中。

这些方法是通过在类的接口定义中包含来声明的:

@interface MyViewController : UIViewController <NSURLConnectionDelegate>

这告诉编译器,您的类承诺实现该协议的所有必需方法,并且它可能会实现可选方法,因为该协议只有可选方法。因此声明是公开的,它们只是在另一个文件中。

该方法是私有的,因为在Objective-C中可能有一个私有方法。实际上,您可以从类外部调用该方法,即使它没有在接口中声明。通过Objective-C处理方法调用的动态性,这是可能的——任何对象都可以接收obj-C对方法的行话所表示的任何消息,但该对象是否能够使用该方法执行某些操作取决于许多事情。查看苹果的文档


简单的回答是,您的代码按照您现有的方式工作,因为您的类中存在您的方法的实现,Objective-C知道如何在运行时找到它,而不管您的类接口是什么。

该方法是私有的,因为Objective-C中可能有一个私有方法。您实际上可以从类外部调用该方法,即使它没有在接口中声明。通过Objective-C处理方法调用的动态性,这是可能的——任何对象都可以接收obj-C对方法的行话所表示的任何消息,但该对象是否能够使用该方法执行某些操作取决于许多事情。查看苹果的文档


简单的回答是,您的代码按您的方式工作,因为您的类中存在方法的实现,Objective-C知道如何在运行时找到它,而不管您的类接口如何。

听起来OP好像忘记了协议一致性声明。他应该在初始值设定项上得到警告,尽管看起来旧版本的iOS将参数声明为id而不是id,所以这取决于他使用的SDK。@Kevin:是的,我也有这种印象。谢谢你的快速回复。我刚刚检查了ViewController类接口,它实际上没有包含协议。听起来OP好像忘记了协议一致性声明。他应该在初始值设定项上得到警告,尽管看起来旧版本的iOS将参数声明为id而不是id,所以这取决于他使用的SDK。@Kevin:是的,我也有这种印象。谢谢你的快速回复。我刚刚检查了ViewController类接口,它实际上不包括protocol@shredding:你应该接受乔希的回答。这个答案是正确的,因为在Obj-C中没有私有方法,但真正的问题是缺乏协议一致性。声明您符合该协议将使您能够直接调用该方法,并且正是该协议记录了NSURLConnection所寻找的方法。@分解:您应该接受Josh的答案。这个答案是正确的,因为在Obj-C中没有私有方法,但真正的问题是缺乏协议一致性。声明您符合该协议将使您能够直接调用该方法,并且正是该协议记录了NSURLConnection所寻找的方法。