Нюансы реализации метода Objective C

Я только что начал разрабатывать для iPhone, и нахожусь в процессе изучения Objective C. Я видел некоторый код, который реализует метод в @implementation стороне класса как это:

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

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

Кто-либо может сказать мне, что продолжается?

Спасибо!

1
задан DShah 9 February 2012 в 08:56
поделиться

2 ответа

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

2
ответ дан 3 September 2019 в 00:20
поделиться

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

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

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

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

0
ответ дан 3 September 2019 в 00:20
поделиться