Я использую их:
TGpStringListHelper = class helper for TStringList
public
function Last: string;
function Contains(const s: string): boolean;
function FetchObject(const s: string): TObject;
procedure Sort;
procedure Remove(const s: string);
end; { TGpStringListHelper }
Во время выполнения, когда сообщение отправляется объекту, этот объект переходит к классу, который его создал, и говорит: «Мне было отправлено это сообщение. Запустите код соответствующего метода». Это отличается от большинства языков компиляции, где выполняемый метод определяется во время компиляции.
КАК ЗНАЕТ ОБЪЕКТ, ЧТО ЕГО СОЗДАЛ КЛАСС?
Он использует указатель isa . Каждый объект имеет переменную экземпляра с именем isa. Когда объект создается, класс устанавливает переменную экземпляра isa возвращаемого объекта так, чтобы он указывал на этот класс. Он называется указателем isa, потому что объект является экземпляром этого класса. Хотя вы, вероятно, никогда не будете явно использовать указатель isa, его существование дает Objective-C большую часть его возможностей.
Объект отвечает на сообщение, только если его класс (на который указывает его указатель isa) реализует связанный метод. Поскольку это происходит во время выполнения, XCode не всегда может выяснить во время компиляции (при сборке приложения), будет ли объект отвечать на сообщение. XCode выдаст вам сообщение об ошибке, если посчитает, что вы отправляете сообщение объекту, который не будет отвечать, но если он не уверен, это позволит построить приложение.
Если по какой-то причине (а возможностей много), вы в конечном итоге отправляете сообщение объекту, который не отвечает, ваше приложение выдаст исключение. Таким образом, указатель isa является причиной ошибки во время выполнения . Давайте проверим детали и пример здесь: IOS - Objective-C - исключения и нераспознанные селекторы