2012-01-24 2 views
1

간 프로세스 통신에 CFMessagePortRef을 사용하고 있습니다. 데이터를 수신, 나는c 함수에서 코코아 (목표 c) 함수로 데이터를 가져 오는 방법

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

이것은 info을위한 것입니다. 콜백을 설정할 때 을 info 포인터로 전달하십시오. 그런 다음 원래 객체와 통신 할 수 있도록 콜백에서 참조 해제합니다.

메모리 관리에주의하십시오. self이 콜백 전에 할당 해제되면 할당을 취소하면 충돌이 발생합니다. dealloc에 콜백 등록을 제거하십시오. 그렇게하지 마십시오.

관련 문제