'NSCharacterSet'可能无法响应'-count'

时间:2010-10-23 07:31:07

标签: iphone nscharacterset

我在

中收到了警告信息
NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3]; 
int chr_count3;
chr_count3=[myCharSet3 count];

如何修复该警告?

3 个答案:

答案 0 :(得分:4)

具体而言,NSCharacterSet个实例不响应选择器count

如果您将count实现为类别方法(应该加上前缀以避免冲突),那么您需要包含声明它的头文件。

尝试在运行时调用此方法将引发异常(或者它可能已经作为私有方法实现,在这种情况下不会有异常;但您不应该依赖于此。)

答案 1 :(得分:3)

NSCharacterSet没有正式提供计数方法。但是在我的测试中,[myCharSet3 count]实际上给出了正确的结果。所以只是为了摆脱警告:

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

但我认为这不是一个好主意。

答案 2 :(得分:0)

以下是count NSCharacterSet的实现。我假设NSCharacterSet内部使用API​​中公开的bitmapRepresentationcharacterIsMember依赖于此并且速度很快。直接对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;
}