2014-03-27 51 views
0

因此,我使用的是NSUserDefaults,我想確保保存NSArray而不是NSMutableArray。我在保存之前先處理NSMutableArray,但是,我想知道如何最好地保存它。如果我想確保NSMutableArray返回僅作爲NSArray處理,是否複製我應該使用的?演員?

我該做setObject:[mutableArray copy]嗎?或者[setObject:(NSArray *)mutableArray]?第三個選項?

我傾向於copy,因爲它似乎是mutableCopy的自然對應物,但是在ARC之前不會廣泛使用某些不同的副本嗎?我認爲copyautorelease仍然流行的電話被用於不同的事情。

+0

你可以簡單地使用'setObject:mutableArray'。 – cojoj

+0

需要強烈指出的是(在一般情況下 - 不是特定於NSUserDefaults)只需轉換爲NSArray不會阻止修改可變數組。它必須實際上以這樣或那樣的方式複製。 –

回答

3

NSUserDefaults已經保存了NSArray,即使您通過了NSMutableArray

對於其他情況,使用ARC的copy完全可以使用。此外,您不需要投射,因爲多態性的NSMutableArray指針與NSArray指針兼容(但不是反之亦然)。

+0

那麼我需要確保它是NSArray的另一種情況呢? –

+0

在這種情況下,您應該複製它。 –

+2

需要說明的是,'copy'總是創建一個不可變的副本(即NSMutableArray的副本是一個NSArray)。同樣,'mutableCopy'總是創建一個可變副本。 – titaniumdecoy

相關問題