我已經閱讀了許多SO帖子,然後問這個問題,我猜這個答案在那裏,但我沒有看到它。我是Objective-C的新手,我試圖做一個我看不出來的(看似)簡單的操作。Objective-C:拷貝數組,修改拷貝中的元素(對象)
總的想法是,我有一個NSArray
填充對象(特別是類型UIImageView
)。我想複製該數組,我已經完成了許多方法(全部成功)。
複製完成後,我現在有兩個數組。我想修改一個對象,比如索引2,,只有在副本中。
到目前爲止,似乎等,因爲複製僅僅複製參考(或指針),改變對象在索引2將改變它在二者複製和原稿。
這有道理嗎?
NSArray *originalArray = @[object1, object2];
的方法,我已經試過複製此陣,這樣我就可以達到我想要的:
NSMutableArray *originalArrayCopy = [NSMutableArray arrayWithArray:originalArray];
NSArray *originalArrayCopy = [originalArray copy];
NSMutableArray *originalArrayCopy = [[NSMutableArray alloc] initWithArray:originalArray];
它似乎在每種情況下,從複製修改對象還修改它原本的。
注:雖然NSArray
顯然是不可變的,我原來的陣列內的對象是可變的。
是的,第二個解決方案是有意義的。然而,我在我的問題中犯了一個錯誤,因爲我沒有指定我的原始數組中的元素是UIImageView類型。我知道這讓事情變得更具挑戰性。在嘗試第二種解決方案時,我收到錯誤:'NSInvalidArgumentException [UIImageView mutableCopywithZone:]' – codework
每個UIImageView對象都是我的一個類的屬性。 – codework
請編輯您的問題,解釋您爲什麼要複製圖像視圖。你將把它們放在你的視圖層次結構中? –