当对象为Nil时,行为MutableCopy

时间:2012-11-28 15:39:29

标签: xcode nsmutablearray immutability mutable

(我无法在网上找到这个)

所有代码都在一个对象中。在.h文件中,我定义了一个NSMutableArray。我分配它 在初学者。

-(id)init{
    self = [super init];
    if(self) {
        definitionArray=[[NSMutableArray alloc] init];
        [self initialLoadDefinitionData];

        if([definitionArray isKindOfClass:[NSMutableArray class]]) {
           NSLog(@"Array is Mutable");
        } else {
           NSLog(@"Array is Not Mutable");
        }

    }
    return self;
}

我想基于NSUserDefaults值初始化,所以我从中调用另一个函数 在里面。这称为initialLoadDefinitionData:theCollection是非常基本的。

-(void)loadDefinitionData{
    definitionArray=[[[NSUserDefaults standardUserDefaults] objectForKey:@"SOMEKEY"] mutableCopy];
}

我在init函数中添加了isKindOfClass,仅用于调试目的。有趣的部分 这是因为当从数据中获取数据时,这个IF语句返回MUTABLE NSUserDefaults的。但是如果@“SOMEKEY”不可用,则objectForKey返回一个 nil和definitionArray突然是IMMUTABLE。即使指定了mutableCopy。

所以我的结论是,如果objectForKey找不到对象,则返回值为 不可以。这个结论是否正确? 或者,MutableCopy不能将对象称为可变对象,它是否为Nil?

1 个答案:

答案 0 :(得分:3)

没有你的结论是对的。如果objectForKey返回nil,那么您就会向mutableCopy发送nil消息,当然会返回nil(每封邮件都会发送到nil在ObjC中返回nil),这就是你看到else部分的原因。 (Array is Not Mutable消息具有误导性,因为此时您甚至没有NSArray实例。)