Xcode 对象为Nil时的行为MutableCopy
(我在网上找不到这个) 所有代码都在一个对象内。在.h文件中,我定义了一个NSMutableArray。我把它分配了 一开始Xcode 对象为Nil时的行为MutableCopy,xcode,nsmutablearray,immutability,mutable,Xcode,Nsmutablearray,Immutability,Mutable,(我在网上找不到这个) 所有代码都在一个对象内。在.h文件中,我定义了一个NSMutableArray。我把它分配了 一开始 -(id)init{ self = [super init]; if(self) { definitionArray=[[NSMutableArray alloc] init]; [self initialLoadDefinitionData]; if([definitionArray isKindOfCl
-(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:集合非常基本
-(void)loadDefinitionData{
definitionArray=[[[NSUserDefaults standardUserDefaults] objectForKey:@"SOMEKEY"] mutableCopy];
}
我在init函数中添加了isKindOfClass,只是为了调试。有趣的部分
在这种情况下,当可以从
默认值。但是,如果@“SOMEKEY”不可用,objectForKey将返回
nil和definitionArray突然之间是不可变的。即使指定了mutableCopy
所以我的结论是,如果objectForKey找不到对象,返回值是
不可变。这个结论正确吗?
或者说,可变复制不能因为对象为零而不处理对象吗?不,你的结论是不对的。如果
objectForKey
返回nil
,那么您正在向nil
发送mutableCopy
消息,该消息当然返回nil
(在ObjC中发送到nil
的每条消息都返回nil
),这就是您看到else
部分的原因。(数组是不可更改的消息具有误导性,因为此时您甚至没有NSArray
实例)。我理解您的说法,也同意您的看法。但是,当我在加载后立即包含addObject语句时,不会添加该值。并且类型仍然是不可更改的。因此,这可能意味着在每个不返回任何内容的objectForKey之后,我必须再次分配数组。@Vincent如果objectForKey:
没有找到它计算为nil
的键。这意味着您有:definitionArray=nil
。这并不是说您有一个空数组,而是将ivar设置为nil
。我希望这是有意义的。。。