Как получить данные из функции c в функцию какао (цель c) - PullRequest
1 голос
/ 24 января 2012

Я использую CFMessagePortRef для межпроцессного взаимодействия.для получения данных у меня есть метод обратного вызова

CFDataRef didReceiveDataFromOtherProcess(CFMessagePortRef local,SInt32 msgid,CFDataRef data,void *info)

Теперь я хочу отправить полученные данные моему главному контроллеру.я могу создать объект основного контроллера в didReceiveDataFromOtherProcess и отправить данные на главный контроллер, но я хочу написать обобщенный модуль передачи сообщений.я не могу получить доступ к переменной экземпляра в функции обратного вызова, в этом случае делегат работать не будет, поэтому я определил метод -(void)saveObject:(id)object и сохранил объект основного контроллера в глобальной переменной.

messagePassing *object = [[messagePassing alloc]init];
[object saveObject:self]; //in main controller

//in messagePassing
-(void)saveObject:(id)object
{
globalObject = object;
}

CFDataRef didReceiveDataFromOtherProcess(CFMessagePortRef local,SInt32 msgid,CFDataRef data,void *info)
{
//....
[globalObject didReceivedData:(id)data]; // sending to main controller
}

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

1 Ответ

1 голос
/ 31 января 2012

Это то, для чего info.Передайте self в качестве указателя info при настройке обратного вызова.Затем разыменуйте его в обратном вызове, чтобы вы могли связаться с исходным объектом.

Будьте осторожны с управлением памятью.Если self освобожден перед обратным вызовом, вы потерпите крах, когда освободите его.Обязательно удалите регистрацию обратного вызова в dealloc, чтобы этого не произошло.

...