0

で警告メッセージが表示されました

NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3]; 
int chr_count3;
chr_count3=[myCharSet3 count];

その警告を修正する方法は?

4

3 に答える 3

4

具体的には、NSCharacterSetインスタンスはセレクターに応答しませんcount

countカテゴリ メソッド (衝突を避けるためにプレフィックスを付ける必要があります) として実装した場合は、それを宣言するヘッダー ファイルをインクルードする必要があります。

実行時にこのメソッドを呼び出そうとすると、例外が発生します (または、すでにプライベート メソッドとして実装されている可能性があります。その場合、例外は発生しませんが、これに依存するべきではありません)。

于 2010-10-23T07:46:48.990 に答える
3

NSCharacterSet は公式に count メソッドを提供していません。ただし、私のテストでは、[myCharSet3 count] は実際には正しい結果をもたらします。したがって、警告を取り除くためだけに:

chr_count3 = (int)[myCharSet3 performSelector:@selector(count)];

しかし、それは良い考えだとは思いません。

于 2010-10-23T07:52:38.957 に答える
0

これは forの実装countですNSCharacterSet。NSCharacterSet 内部bitmapRepresentationは API で公開されているものを使用し、characterIsMemberこれに依存していて高速であると想定しています。データに対して直接ポインター操作を行う方がおそらく高速ですがbitmapRepresentation(メンバーシップをテストする方法については、後者の方法に関する Apple のドキュメントを参照してください)、この読み取り可能なバージョンに固執したいと思います。65536 回の反復のループは、ほとんどの状況でそれほど悪くはありません。これを頻繁に呼び出すと、不変クラスを処理するときに戻り値をキャッシュすることもできます。のプライベートな内部実装との衝突を避けるために、「foobar」を独自のプレフィックスに置き換えますcount

- (NSUInteger)foobar_count
{
    NSUInteger count = 0;
    for (NSUInteger i = 0; i < 8192 * 16; i ++)
    {
        if ([self characterIsMember:(unichar)i])
        {
            count ++;
        }
    }
    return count;
}
于 2015-08-18T09:19:11.213 に答える