Отправка экземпляра Objective C в функцию C - PullRequest
1 голос
/ 03 января 2012

У меня есть функция C в MyClass, и я могу вызывать ее из этого класса. Можно ли отправить экземпляр MyClass функции C в виде сообщения?

Чтобы объяснить полностью, на данный момент

MyClass *obj = [[MyClass alloc] init];
[obj myCFunction];

Дает ошибку компилятора: «Тип получателя« MyClass »для сообщения экземпляра не объявляет метод с селектором« myCFunction »». myCFunction объявлена ​​в MyClass.h @interface, и полный код находится перед @implementation в MyClass.m и работает нормально, если вызывается из @implementation MyClass.m. Поэтому функции C являются частными, и могу ли я сделать их общедоступными, чтобы я мог отправить их как сообщение экземпляру MyClass?

Я пытаюсь написать модульные тесты, которые проверяют каждый этап некоторых вычислений, поэтому простое создание целевого метода c для вызова функции c не кажется эффективным решением.

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 03 января 2012

Неа. Отправка сообщений - это конструкция Objective C, поэтому у вас должен быть метод, определенный для объекта (или класса) для отправки сообщения. У вас есть два варианта: написать метод экземпляра, который вызывает функцию C, или передать функции C объект, который он должен использовать.

Если функция C объявлена ​​в вашем заголовочном файле, она является общедоступной для всех файлов, которые включают этот заголовочный файл. Поэтому вы можете вызвать его из своего тестового кода, он просто не знает, на какой объект вы ссылаетесь, если вы ссылаетесь на данные, объявленные в вашем .m-файле. Вы должны явно указать, на какой объект вы ссылаетесь в функции C, передав ему ссылку на этот объект. В реализации класса функция C будет вызываться с myCFunction(self). Затем получите доступ к любым данным объекта через эту ссылку, а не непосредственно к локально объявленным переменным.

...