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 内部使用bitmapRepresentationAPI 中公开的,并且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 回答