Как использовать метод самокласса на iPhone?(концептуальный вопрос)

StackOverflow https://stackoverflow.com/questions/605414

Вопрос

Я пишу метод экземпляра в ClassName.m:

-(void)methodName:(paraType)parameter
{...}

И вызовите его, используя

[self methodName:parameter]; 
Появится предупреждение, но код по-прежнему работает успешно.

Это потому, что я не создал экземпляр класса?Почему метод по-прежнему работает нормально?И как правильно вызвать метод self, чтобы предотвратить появление предупреждения?

Это было полезно?

Решение

Ну, первым шагом к получению помощи с предупреждением будет публикация предупреждения :)

Я предполагаю, что это что-то о неопознанном сообщении?Если это так, то это потому, что, хотя компилятор и видит вызов «имя_метода», он не знает, действительно ли это для объекта или нет.

Я предполагаю, что ваш код выглядит так:

-(void) someFunc
{
  ...
  [self methodName:parameter]; 
  ...
}

-(void)methodName:(paraType)parameter
{
...
}

Вы также можете;

а) Поместите функцию «имя_метода» раньше в файл, чтобы компилятор увидел ее до того, как она будет использована в вызовах.

б) объявить это в интерфейсе класса.Например.

// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end

Другие советы

Какое предупреждение вы получите?

Есть ли у вас определение метода в заголовочном файле?

Используемый вами синтаксис — это правильный способ вызова метода для себя.

Этот метод будет работать, поскольку методы Objective-C разрешаются во время выполнения.Я ожидаю, что вы получите предупреждение что-то вроде «Объект Foo может не ответить на -methodName:», а затем оно сообщит вам, что по умолчанию тип возвращаемого значения равен id.Это потому, что компилятор не увидел объявления или определения -methodName: к моменту компиляции кода, в котором вы его вызываете.Чтобы удалить предупреждение, объявите метод либо в интерфейсе класса, либо в категории класса.

Если вы получаете предупреждение, возможно, это связано с тем, что сигнатура метода отсутствует в интерфейсе.

@interface foo ....

-(void)method;

Как только реализация будет написана, предупреждение должно исчезнуть, поскольку компилятор видит этот метод не в первый раз.Без этого все будет работать, но предупреждающее сообщение раздражает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top