Objective c 带NSSet的块

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

有人能告诉我为什么当“程序”中有小写字符时returnSet返回为nil吗

我已经通过了,NSLog肯定是在挑选变量,但当它添加对象时:它就是不

+ (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内存管理问题。您发布的代码返回对它创建的集合的非所有者引用。除非将它保存到强实例变量中,否则它将被释放。

是的,我已经去掉了_块,现在它仍然可以工作,也许它只是共关联;我现在做了很多改变。和往常一样,我学到了一些关于何时使用块的新知识-谢谢大家!