我收到一条警告信息
NSCharacterSet *myCharSet3 = [NSCharacterSet characterSetWithCharactersInString:query3];
int chr_count3;
chr_count3=[myCharSet3 count];如何修复该警告?
发布于 2010-10-23 15:52:39
NSCharacterSet没有正式提供count方法。然而,在我的测试中,myCharSet3 count实际上给出了正确的结果。因此,为了摆脱警告:
chr_count3 = (int)[myCharSet3 performSelector:@selector(count)];但我不认为这是个好主意。
发布于 2010-10-23 15:46:49
具体地说,NSCharacterSet实例不响应选择器count。
如果您将count实现为一个category方法(应该加上前缀以避免冲突),那么您需要包含声明它的头文件。
尝试在运行时调用此方法将引发异常(或者它可能已经作为私有方法实现,在这种情况下不会有异常;但是您不应该依赖此方法)。
发布于 2015-08-18 17:19:11
下面是一个针对NSCharacterSet的count实现。我假设NSCharacterSet内部使用API中公开的bitmapRepresentation,并且characterIsMember依赖于此并且速度很快。直接在bitmapRepresentation数据上进行指针操作可能会更快(有关如何测试成员资格的信息,请参阅苹果公司关于后者的文档),但我更愿意使用这个可读的版本。在大多数情况下,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;
}https://stackoverflow.com/questions/4002969
复制相似问题