我以为我对 Objective-C 中的对象和可变性有很好的理解,但我注意到一些奇怪的事情NSArray
.
如果我有以下不起作用:
NSArray *myArray = [ [[NSUserDefaults standardUserDefaults] arrayForKey:someKey] arrayByAddingObject:myObject ];
“myObject”永远不会添加到“myArray”中.
但是,以下工作有效:
NSArray *someArray = [[NSUserDefaults standardUserDefaults] arrayForKey:someKey];
NSArray *myArray = [someArray arrayByAddingObject:myObject];
对此有何解释?我知道NSArray
不是可变的,但由于它是在初始分配期间,因此它应该可以工作,因为两种方式似乎都是等效的。
[[NSUserDefaults standardUserDefaults] arrayForKey:someKey]
返回一个NSArray
someArray 是一个NSArray
所以,一个NSArray
简单地源自[NSArray arrayByAddingObject:Object]
Thanks!
EDIT 1
我只是想存储NSArray
回到NSUserDefaults
:
[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:someKey];
它从未正确存储它,因此当我调试时,我看到创建数组时从未添加“myObject”。
注意:我只测试过[[NSUserDefaults standardUserDefaults] arrayForKey:someKey]
返回一个空/nil
array
EDIT 2
我已经稍微隔离了这个问题;这只有在以下情况下才会发生[NSUserDefaults standardUserDefaults] arrayForKey:someKey]
返回“零”(基本上,该数组不存在于NSUserDefaults
)。
我仍然很想知道为什么这对于我的第二个代码解决方案来说不是问题。