我收到了一条警告信息
NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3];
int chr_count3;
chr_count3=[myCharSet3 count];
如何解决该警告?
我收到了一条警告信息
NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3];
int chr_count3;
chr_count3=[myCharSet3 count];
如何解决该警告?
具体来说,NSCharacterSet
实例不响应选择器count
。
如果您实现count
为一个类别方法(应该添加前缀以避免冲突),那么您将需要包含声明它的那个头文件。
尝试在运行时调用此方法将引发异常(或者它可能已经作为私有方法实现,在这种情况下不会出现异常;但您不应依赖此方法)。
NSCharacterSet 没有官方提供 count 方法。但是在我的测试中, [myCharSet3 count] 实际上给出了正确的结果。所以只是为了摆脱警告:
chr_count3 = (int)[myCharSet3 performSelector:@selector(count)];
但我不认为这是一个好主意。
这是 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;
}