【问题标题】:'NSCharacterSet' may not respond to '-count'“NSCharacterSet”可能不响应“-count”
【发布时间】:2010-10-23 07:31:07
【问题描述】:

我收到一条警告消息

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

如何解决该警告?

【问题讨论】:

    标签: iphone nscharacterset


    【解决方案1】:

    具体来说,NSCharacterSet 实例不会响应选择器 count。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        这是count 的实现NSCharacterSet。我假设 NSCharacterSet 内部使用 API 中公开的 bitmapRepresentation,而 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;
        }
        

        【讨论】:

          猜你喜欢
          • 2011-11-02
          • 2011-05-24
          • 2017-01-31
          • 2013-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多