Как использовать метод собственного класса на iPhone? (концептуальный вопрос) - PullRequest
0 голосов
/ 03 марта 2009

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

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

И вызвать его с помощью

[self methodName:parameter]; 
Появится предупреждение, но код все еще выполняется успешно.

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

Ответы [ 4 ]

5 голосов
/ 03 марта 2009

Ну, первый шаг в получении справки с предупреждением - опубликовать предупреждение:)

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

Я думаю, ваш код выглядит так:

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

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

Вы можете либо;

a) Поместите функцию 'methodName' ранее в файл, чтобы компилятор видел ее перед тем, как использовать в вызовах.

б) объявить его в интерфейсе класса. Э.Г.

// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end
1 голос
/ 29 марта 2011

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

@interface foo ....

-(void)method;

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

1 голос
/ 03 марта 2009

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

1 голос
/ 03 марта 2009

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

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

Используемый вами синтаксис - лучший способ вызова метода для себя.

...