Вызов методов для объектов типа id - PullRequest
1 голос
/ 29 июля 2011

когда я пытаюсь вызвать метод для объекта типа id, я получаю предупреждение (метод не найден).Конечно нет, но разве в этом не смысл объекта id?

Есть ли способ сообщить компилятору:
"Теперь у вас нет класса объекта, для которого я вызываю этот метод, но не волнуйтесь, я уверенэто реализует это! "
?

Ответы [ 3 ]

8 голосов
/ 29 июля 2011

Вы можете использовать performSelector?

И если у вас есть тип объекта id, вероятно, также неплохо бы использовать respondsToSelector:)

то есть

if ([myObject respondsToSelector:@selector(dosomething:)])
    myObject performSelector:@selector(doSomething:) withObject:@"hello"];
4 голосов
/ 29 июля 2011

Да, просто используйте переменную соответствующего типа класса. Вы можете выполнить явное приведение при отправке сообщения или назначить его переменной правильного типа. В Objective-C тип id может быть неявно приведен к любому типу указателя объекта Objective-C:

id myId = ...;

// Option 1: Use a cast when sending the message
[(MyClass *)myId someClassMethod];

// Option 2: Assign to a variable
MyClass *myObj = miId;  // Implicit cast in the assignment
[myObj someClassMethod];
1 голос
/ 29 июля 2011

Вы можете привести свой объект id к классу, который, как вы знаете, это.

Если у вас есть экземпляр id с именем instanceA, и вы знаете, что он имеет ClassA, то вы применилисоответственно

Class A *instanceACasted = (ClassA *)instanceA;

затем вызовите метод

[instanceACasted methodCall];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...