Я только что начал разрабатывать для iPhone, и нахожусь в процессе изучения Objective C. Я видел некоторый код, который реализует метод в @implementation стороне класса как это:
-(void)myMethod; {
// method body
}
Что делает, это интересное - то, что нет никакого упоминания о myMethod в @interface для класса. Я попробовал демонстрационный проект этим и когда я компилирую, я получаю предупреждение от XCode, что myMethod не может быть замечен кодом вызова.
Кто-либо может сказать мне, что продолжается?
Спасибо!
Это похоже на функции в C. Вам не нужно объявление (т.е. оно не обязательно должно быть в @interface
), но если объявления нет, любой код до определения метода вызовет это предупреждение. Код после определение метода не будет генерировать предупреждение.
В ObjC вызовы методов разрешаются динамически ( динамическое связывание ), что означает, что когда вы выполняете [obj myMethod];
, внутренне программное обеспечение времени выполнения ObjC будет проходить через методы класса в этот момент времени , и если он найдет объект с именем «myMethod», он вызовет его.
Также можно добавлять методы к объекту во время выполнения.
Объявления методов в разделе @interface
предназначены только для того, чтобы помочь компилятору определить, какие методы являются общедоступными для данного класса. Если вы добавите метод только в свою @implementation
, компилятор может предупредить вас об этом, но код все равно будет компилироваться и работать.
Иногда я использую это для добавления внутренних методов к моим объектам, которые вызываются только из других методов после него, а не извне. Хотя я не помню, чтобы предупреждал об этом ... Убедитесь, что вызывающий код помещен после реализации метода в том же файле.