0

このチュートリアルにあるAcceptCallBackメソッドを使用しました。これにより、アプリが別のコンピューターからファイルを受信できるようになります。selfAcceptCallBackメソッドで使用しようとすると、「宣言されていない識別子'self'の使用」というエラーが発生selfします。クラス内の他のメソッドを呼び出すために使用できる方法があるかどうか疑問に思いました。

4

1 に答える 1

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、ポインタは無効になります。

于 2013-02-26T06:04:24.833 に答える