Objective c 带NSSet的块
有人能告诉我为什么当“程序”中有小写字符时returnSet返回为nil吗 我已经通过了,NSLog肯定是在挑选变量,但当它添加对象时:它就是不Objective c 带NSSet的块,objective-c,ios,objective-c-blocks,Objective C,Ios,Objective C Blocks,有人能告诉我为什么当“程序”中有小写字符时returnSet返回为nil吗 我已经通过了,NSLog肯定是在挑选变量,但当它添加对象时:它就是不 + (NSSet *)variablesUsedInProgram:(id)program { NSMutableSet *returnSet = [[NSMutableSet alloc]init]; if ([program isKindOfClass:[NSArray class]]) { [program en
+ (NSSet *)variablesUsedInProgram:(id)program
{
NSMutableSet *returnSet = [[NSMutableSet alloc]init];
if ([program isKindOfClass:[NSArray class]]) {
[program enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop)
{
if ([obj isKindOfClass:[NSString class]]) {
if ([obj rangeOfCharacterFromSet:[NSCharacterSet lowercaseLetterCharacterSet]].location != NSNotFound) {
NSLog(@"Variable: %@", obj);
[returnSet addObject:obj];
}
}
}];
}
return returnSet;
}
发布的代码没有bug。它不能返回值nil
您的错误在别处。我猜您的问题是ARC内存管理问题。您发布的代码返回对它创建的集合的非所有者引用。除非将它保存到强实例变量中,否则它将被释放。是的,我已经去掉了_块,现在它仍然可以工作,也许它只是共关联;我现在做了很多改变。和往常一样,我学到了一些关于何时使用块的新知识-谢谢大家!