Методы делегатов объявлены в частном порядке? - PullRequest
1 голос
/ 06 марта 2012

В методе viewDidLoad моего контроллера представления я создаю NSURLConnection

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest 
                                                               delegate:self]

Вы можете видеть, что я установил делегат на self.

Затем я реализовал делегатmethod

-(void) connection: (NSURLConnection*) connection didReceiveResponse: (NSURLResponse*) reponse {
   //myImplementation;
}

Эта реализация определена только в блоке @implementation ViewController @end и не объявлена ​​в ViewController '@interface.

Итак, я полагаю, этот метод является частным?Он компилируется и работает хорошо.Но я просто не могу назвать этот метод как [self connection: connection didReceiveResponse: response] в собственных методах ViewController.

В чем объяснение?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Метод является «частным», поскольку в Objective-C можно использовать частный метод.На самом деле вы можете вызывать метод извне класса, даже если он не объявлен в интерфейсе.Это возможно благодаря динамичности Objective-C в том, как он обрабатывает вызовы метода - любой объект может получить любое сообщение (язык метода obj-c), но может ли объект что-то сделать с этим методом, зависит от любогоколичество вещей.Посмотрите Object Messaging в документации Apple.

Короткий ответ: ваш код работает так, как он есть у вас, потому что реализация вашего метода существует в вашем классе, и Objective-C знает, какнайдите его во время выполнения независимо от интерфейса вашего класса.

2 голосов
/ 06 марта 2012

Методы объявляются посредством включения протокола NSURLConnectionDelegate в определение интерфейса класса:

@interface MyViewController : UIViewController <NSURLConnectionDelegate>

Это сообщает компилятору, что ваш класс обещает реализовать все необходимые методы этого протокола, и что он может реализовывать необязательные методы (как это бывает, этот конкретный протокол имеет только необязательных методов). Так что декларации существуют публично, они просто в другом файле.

...