一个已经有内容的可变数组: contentArray
需求: 创建一个新数组,内容和contentArray相同.
方式一:
NSArray *otherArray = contentArray;
方式二:
NSArray *otherArray = [NSArray arrayWithArray:contentArray];
虽然看上去两种方式产生的otherArray
的值相同,但如果[contentArray removeAllObjects]
则:
方式一产生的otherArray
内容会跟随contentArray
一起变为空
方式二产生的otherArray
内容依然存在
为什么会出现这样的问题呢?
方式一:
实际上是将`otherArray指针`指向了`contentArray指针`所指向的内容,从而使得他们有了相同的值.
但如果他们指向的内容变化时, `otherArray`和`contentArray`会一起变化
方式二:
创建`otherArray`的时候使用的方法`[NSArray arrayWithArray:contentArray]`,通过Apple文档得知:
`Creates and returns an array containing the objects in another given array.`
可以明确的看出,用这种方式创建的数组是将`contentArray`中的内容添加到了`otherArray`中,
这样就使得`otherArray`中的每个对象都和`contentArray`相同,但两者的地址却不同,
从而不管哪一方数组变化(增加/减少),都不会影响到另一方.
需要注意的是:两个数组中的对象地址是相同的,说明如果修改了对象的内容,另一个数组中的内容也会变化.
赋值图.png
网友评论