0

データベース ストアド プロシージャのプロキシを実装しようとしています。アイデアは、コードでデータベース内の一連のストアド プロシージャを検索し、それらのストアド プロシージャに一致するメソッドを実装するプロキシ オブジェクトをメモリ内に作成することです。そのプロキシ オブジェクトは NSProxy または NSObject から派生させることができ、どちらも機能するはずです。基本的な考え方は、プロキシ オブジェクトに対して行われたメソッド呼び出しはすべて resolveInstanceMethod: に移動し、メソッド呼び出しがデータベース内のストアド プロシージャと一致した場合にそこで処理されるというものです。

しかし、私の目的に近づく前に、宣言されていないメソッドへのメソッド呼び出しを許可していないように見えるARCに困惑しています。ARC の前の時代には、コンパイラから「オブジェクトがセレクタに応答しない可能性があります」などの警告が表示されましたが、ARC を有効にすると、「セレクタの既知のインスタンス メソッドがありません.. .」。これは、最初にプロキシ オブジェクトを (id) にキャストした場合にも発生します。

これはすべて、Objective-c の基本的な特徴の 1 つであるメソッドのランタイム検出と ARC が互換性がないことを暗示しているようです。C++ と同様に、使用するすべてのメソッドをコンパイル前にインターフェイスで宣言する必要があるようです。

または、おそらく、重要な何かが欠けています。もしそうなら、何?

コードを含めるように編集:

int main(int argc, const char * argv[])
{

@autoreleasepool {

    // insert code here...
    NSLog(@"Hello, World!");


    MyTargetClass *mtc = [[MyTargetClass alloc] init];
    [mtc doSomething];
}
return 0;
}

MyTargetClass には何も含まれていません:

@interface MyTargetClass : NSObject

@end

[mtc doSomething] 呼び出しは、非 ARC プロジェクトの場合は警告を引き出しますが、ARC ではコンパイラ エラーを引き出します。私見は、ARCが使用されている場合、実行時にクラスにメソッドを追加できないことを意味します。

4

1 に答える 1

0

ムウェル、

まず、コードを見せていただけない場合、お手伝いするのは非常に困難です。

次に、インスタンス メソッドを提供することがわかっている場合は、次#pragmaの sを使用して警告を消すことができます。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"

[Your Selector Based Code Here]

#pragma clang diagnostic pop

それが警告記号である場合は、おそらく Xcode のビルド設定内から見つけることができます。

アンドリュー

于 2012-05-04T13:12:38.427 に答える