Нюансы реализации метода Objective-C - PullRequest
1 голос
/ 24 мая 2010

Я только начал разрабатывать для iPhone и сейчас изучаю Objective-C. Я видел некоторый код, который реализует метод на стороне @implementation класса следующим образом:

-(void)myMethod; {
  // method body
}

Что делает это интересным, так это отсутствие упоминания myMethod в @interface для класса. Я попробовал пример проекта с этим, и когда я компилирую, я получаю предупреждение от XCode, что myMethod может не быть замечен вызывающим кодом.

Может кто-нибудь сказать мне, что происходит?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Это так же, как функции в C. Вам не нужно объявление (т. Е. Оно не должно быть в @interface), но если нет объявления, любой код до определения методасгенерирует это предупреждение.Код после определение метода не будет выдавать предупреждение.

0 голосов
/ 24 мая 2010

В ObjC вызовы методов разрешаются динамически ( динамическое связывание ), что означает, что при выполнении [obj myMethod]; внутреннее программное обеспечение среды выполнения ObjC будет проходить через методы класса в этот момент и, если он найдет «myMethod», он вызовет его.

Также возможно добавлять методы к объекту во время выполнения.

Объявления методов в разделе @interface предназначены только для того, чтобы помочь компилятору определить, какие методы общедоступны для данного класса. Если вы добавите метод только в свой @implementation, компилятор может предупредить вас об этом, но код все равно будет компилироваться и работать.

Иногда я использую это для добавления внутренних методов к моим объектам, которые после этого вызываются только из других методов, а не извне. Хотя я не помню, чтобы я видел предупреждения об этом ... Убедитесь, что вызывающий код помещен после реализации метода в том же файле.

...