A = bookmarkArray
B = issueArray
[issueArray addObject:bookmarkArray];
[bookmarkArray removeAllObjects];
爲什麼這會使issueArray空白,以及我能做些什麼來確保在bookmarkArray被清除時仍然存在issueArray填充?添加的NSMutableArray A到NSMutableArray的B,然後做 「removeAllObjects」 上A,清除乙呢?
A = bookmarkArray
B = issueArray
[issueArray addObject:bookmarkArray];
[bookmarkArray removeAllObjects];
爲什麼這會使issueArray空白,以及我能做些什麼來確保在bookmarkArray被清除時仍然存在issueArray填充?添加的NSMutableArray A到NSMutableArray的B,然後做 「removeAllObjects」 上A,清除乙呢?
將bookmarkArray直接添加到issueArray。所以然後issueArray是一個數組持有單個對象,這是一個數組bookmarkArray。如果你改變了bookmarkArray,那麼你可以改變issueArray中的東西。
如果你的意思是目前bookmarkArray添加所有的對象issueArray那麼我建議:
[issueArray addObjectsFromArray:bookmarkArray];
如果你想利用bookmarkArray的副本,並將其添加到issueArray那麼我建議準確同樣的事情taskinoor已經提出:
NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
或者:
NSMutableArray *bookmarkCopy = [bookmarkArray copy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
如果你不需要副本是可變的。
它,因爲當你調用addObject
它添加引用,而不是對象的副本。因此原始對象中的任何更改都會反映在存儲在數組中的引用中。如果你想存儲一個對象的副本,然後複製它並存儲在數組中。
NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
這很可能是他們可能引用了相同的對象。你可以檢查他們是否?
Tommy和taskinoor的解釋是正確的。然而,如果你的目標是要issueArray包含在bookmarkArray的對象,這樣做:
[issueArray addObjectsFromArray:bookmarkArray];
[bookmarkArray removeAllObjects];
確保你的區別清楚。在taskinoor的代碼中,您將向bookmarkArray添加一個對象,並且該對象本身就是一個數組。在上面的行中,您將[bookmarkArray count]
對象添加到issueArray。
+1比我更加冗長:-P – taskinoor 2011-05-17 11:44:55