iphone xcode; mutableCopy仍然是不可变的?

Vee*_*eru 0 iphone xcode nsmutablearray

关于这个问题我到处都看了.我要做的就是创建一个nsuser默认对象,然后向它添加一个可变数组并尝试修改nsuserdefaults对象.

//Created a sample array
NSMutableArray *xml=[[NSMutableArray alloc] init];
[xml addObject:@"x"];
[xml addObject:@"x"];
[xml addObject:@"x"];
[xml addObject:@"x"];
[xml addObject:@"x"];
//assigned to defaults object which is created previously with a mutableCopy
[defaults  setObject:[xml mutableCopy] forKey:@"userLocationsDetailedXML"]; 
//Tried to modify the defaults object - which at this point should be mutable
[[defaults objectForKey:@"userLocationsDetailedXML" ] replaceObjectAtIndex:1 withObject:@"y"] ;
Run Code Online (Sandbox Code Playgroud)

添加也没有[defaults synchronize]帮助.

但令人惊讶的是,默认对象仍然是不可变的.它是__NSCFArray,而不是__NSCFArrayM如预期的任何建议?

编辑:控制台输出类:__ NSCFArray => 因为我创建了一个可变副本,所以它不应该是_ NSCFArrayM吗?[ _NSCFArray replaceObjectAtIndex:withObject:]:mutating方法发送到不可变对象'

dre*_*lax 5

文档:

即使您将可变对象设置为值,NSUserDefaults返回的值也是不可变的.例如,如果将可变字符串设置为"MyStringDefault"的值,则稍后使用stringForKey:检索的字符串将是不可变的.

而且,你有一个相当丑陋的泄漏; 您是返回的对象的所有者,mutableCopy但您无法放弃所有权,因为您丢失了对该对象的唯一引用(xml无论如何,该数组都是可变的).