首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NSCharacterSet”可能不会响应“-count”

“NSCharacterSet”可能不会响应“-count”
EN

Stack Overflow用户
提问于 2010-10-23 15:31:07
回答 3查看 479关注 0票数 0

我收到一条警告信息

代码语言:javascript
复制
NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3]; 
int chr_count3;
chr_count3=[myCharSet3 count];

如何修复该警告?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-23 15:52:39

NSCharacterSet没有正式提供count方法。然而,在我的测试中,myCharSet3 count实际上给出了正确的结果。因此,为了摆脱警告:

代码语言:javascript
复制
chr_count3 = (int)[myCharSet3 performSelector:@selector(count)];

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

票数 3
EN

Stack Overflow用户

发布于 2010-10-23 15:46:49

具体地说,NSCharacterSet实例不响应选择器count

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

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

票数 4
EN

Stack Overflow用户

发布于 2015-08-18 17:19:11

下面是一个针对NSCharacterSetcount实现。我假设NSCharacterSet内部使用API中公开的bitmapRepresentation,并且characterIsMember依赖于此并且速度很快。直接在bitmapRepresentation数据上进行指针操作可能会更快(有关如何测试成员资格的信息,请参阅苹果公司关于后者的文档),但我更愿意使用这个可读的版本。在大多数情况下,65536次迭代的循环并不是那么糟糕,如果您经常调用它,那么在处理不可变的类时也可以缓存返回值。将"foobar“替换为您自己的前缀,避免与count的私有内部实现冲突。

代码语言:javascript
复制
- (NSUInteger)foobar_count
{
    NSUInteger count = 0;
    for (NSUInteger i = 0; i < 8192 * 16; i ++)
    {
        if ([self characterIsMember:(unichar)i])
        {
            count ++;
        }
    }
    return count;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4002969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档