2013-02-26 40 views
0

我已使用此tutorial中的AcceptCallBack方法,該方法允許我的應用程序從另一臺計算機接收文件。當我嘗試在AcceptCallBack方法中使用self時,出現以下錯誤「使用未聲明的標識符'self'」,我想知道是否有任何方法可以使用self來調用該類中的其他方法?如何從AcceptCallBack方法引用類?

回答

0

AcceptCallBack是一個C函數,並不是任何類的一部分,所以沒有self指針。但是,有一種方法可以獲得傳遞給該函數的void *,它可以是任何您需要的;你可以通過這種方式傳遞一個指向你的self對象的指針。

具體來說,函數原型爲:

void AcceptCallBack(
CFSocketRef socket, 
CFSocketCallBackType type, 
CFDataRef address, 
const void *data, 
void *info) 

你可能想info指向你的對象。要做到這一點,你需要設置的CFSocketContext的信息員成爲您self指針:

struct CFSocketContext { 
CFIndex version; 
void *info; 
CFAllocatorRetainCallBack retain; 
CFAllocatorReleaseCallBack release; 
CFAllocatorCopyDescriptionCallBack copyDescription; 
}; 

,當你在CFSocketCreate建立回調。然後,當調用AcceptCallBack時,所需的指針將被傳遞。這是由你來確保這個指針是有效的;如果你的self被釋放,那麼指針將是無效的。

相關問題