UIToolbar和UITabBar的項屬性被指定爲複製(複製)屬性。爲什麼UIToolbar和UITabBar(副本)屬性中的項屬性而不是(保留)
@property(nonatomic,copy) NSArray *items;
但這是爲什麼呢? (副本)不會深度複製NSArray,那麼讓這些屬性淺度複製NSArray的動機是什麼?
UIToolbar和UITabBar的項屬性被指定爲複製(複製)屬性。爲什麼UIToolbar和UITabBar(副本)屬性中的項屬性而不是(保留)
@property(nonatomic,copy) NSArray *items;
但這是爲什麼呢? (副本)不會深度複製NSArray,那麼讓這些屬性淺度複製NSArray的動機是什麼?
問題是他們不希望你改變背後的陣列。他們並不真的希望你改變UIBarButtonItem
。從技術上講,你不知道訪問者在內部做了什麼(它可以深層複製我們所知道的),但是該屬性告訴你它至少會複製數組,這樣如果你選擇在之後改變數組內容(假設它是可變的)那麼一切都將繼續工作。
我可以看到。但我仍然有處理我的原始數組中的所有UIToolbarItems。我想有些保護總比沒有保護好。 –
因爲您可能會分配一個可變數組。該副本確保如果在將其分配給工具欄後更新可變數組,工具欄不受影響。
這與NSMutableXXX
類集羣成員相當標準,您應該在您自己的屬性中執行相同操作。例如,如果你有一個NSString屬性,那麼你應該使它成爲copy
,而不僅僅是strong
,以免客戶端給你一個NSMutableString,保留對它的引用並對它進行變異。
copy
和mutableCopy
使用的NSArray的和NSMutableArray中之間的切換僅僅作爲輕量級的方式,等
並參閱http://stackoverflow.com/questions/587414/nsstring-property-using-copy-instead-of-retain?rq=1 – matt
當你輸入你的問題,界面顯示您可能的重複,他們回答這個問題,抵制誘惑,要求再次。 – matt