在我的视图控制器的viewDidLoad
方法中,我创建了一个NSURLConnection
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest
delegate:self]
您可以看到我将委托设置为self
。
然后我实现了委托方法
-(void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) reponse {
//myImplementation;
}
此实现仅在@implementation ViewController @end
块中定义,并且未在ViewController
' @interface
中声明。
所以我猜这个方法是私有的吗?它编译并运行良好。但我无法在[self connection: connection didReceiveResponse: response]
自己的方法中将此方法称为ViewController
。
解释是什么?
答案 0 :(得分:2)
通过在类的接口定义中包含NSURLConnectionDelegate
protocol来声明方法:
@interface MyViewController : UIViewController <NSURLConnectionDelegate>
这告诉编译器您的类承诺实现该协议的所有必需方法,并且它可以实现可选方法(实际上,这个特定协议只有 可选方法)。因此声明公开存在,它们只是在另一个文件中。
答案 1 :(得分:2)
该方法是“私有的”,因为可以在Objective-C中使用私有方法。实际上,您可以从类外部调用该方法,即使它未在接口中声明。这可以通过Objective-C处理方法调用的方式来实现 - 任何对象都可以接收任何消息(方法的obj-c术语),但是对象是否可以实际使用该方法做某事取决于任何事情的数量。查看Apple的文档中的Object Messaging。
简短的回答是,您的代码可以正常工作,因为您的类中存在方法的实现,而Objective-C知道如何在运行时找到它,无论您的类接口如何。