用NSSet阻止

时间:2012-07-11 19:53:06

标签: objective-c ios objective-c-blocks

任何人都可以告诉我,为什么当' program'

中有小写字符时,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;
}

2 个答案:

答案 0 :(得分:3)

发布的代码没有错误。它不能返回值nil

您的错误在其他地方。

答案 1 :(得分:0)

我猜你的问题是ARC内存管理问题。您发布的代码会返回对其创建的集合的非拥有引用。除非将其保存为强实例变量,否则将取消分配。