11.9 Тип id |
Вверх Предыдущий Следующий |
Тип id обособлен в Objective-C/Pascal. Он напоминает, тип pointer в Object Pascal, за исключением того, что это настоящий класс. Его присвоения совместимы с экземплярами каждого из типов objcclass и objcprotocol, в обоих направлениях: 1.Переменные любого типа (objcclass/objcprotocol) могут быть присвоены переменной типа id. 2.Переменные типа id могут быть присвоены переменным любого определенного типа (objcclass/objcprotocol). Явного приведения типов не требуется для любого из этих присвоений. Кроме того, любой метод Objective-C , объявленный в objcclass или objccategory, который находится в области видимости можно вызвать используя идентификатор переменной типа id. Если во время выполнения экземпляр objcclass, хранящийся в переменной id типа, не отвечает на отправленное сообщение, программа будет завершена с ошибкой времени выполнения: так же, как механизм вызова variants под MS-Windows. При наличии нескольких методов с тем же Pascal именем, компилятор будет использовать стандартную логику разрешения перегрузки, чтобы выбрать наиболее подходящий метод. Он будет вести себя так, как будто все методы objcclass/objccategory в области видимости были объявлены как глобальные overload процедуры (функции). Кроме того, компилятор выведет сообщение об ошибке, если не сможет определить какой перегруженный метод необходим для вызова. В таких случаях список всех методов, которые могут быть использованы для реализации вызова будет печататься в качестве подсказки. Чтобы устранить эту ошибку вы должны использовать явное приведение типа, чтобы сообщить компилятору, какой метод objcclass необходимо вызвать. |