所以,只是一個簡單的問題,何時應該使用副本而不是使用保留。我試圖從互聯網上看,但沒有完全明白。那麼有人可以照亮我嗎?客觀C複製並保留
Q
客觀C複製並保留
7
A
回答
27
當你想保證對象的狀態時,你會使用copy
。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
在這一點上,b被第三條線弄亂了。
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
在這種情況下,b是原始字符串,並且不會被第3行修改。
這適用於所有可變類型。
+4
值得注意的是,許多不可變類型將通過調用-retain來實現-copy;由於它們的價值永遠不會改變,所以在內存中擁有兩個副本是沒有意義的。也就是說,如果沒有進一步的信息,你應該總是編碼,就好像你不知道一個特定的對象是否是可變的。僅僅因爲你輸入你的屬性爲NSString並不意味着有人不會將一個NSMutableString傳遞給它(如上圖所示)。 – ipmcc
3
如果您不希望在不知道的情況下收到的值發生變化,則複製功能非常有用。例如,如果您有一個屬性爲NSString
,並且您設置該字符串一旦設置就不會更改,則需要使用複製。否則,某人可以通過您NSMutableString
並更改該值,從而更改NSString
的基礎值。 NSArray
和NSMutableArray
也是一樣,除了數組上的副本只是將所有指針引用複製到新數組中,但會阻止刪除和添加條目。
7
相關問題
- 1. 客觀c泄漏NSNumber被保留
- 2. 客觀c-NSDictionary保留對象問題
- 3. 複製shell腳本並保留權限
- 4. 保留計數並複製二傳手?
- 5. 複製HTML並保留事件
- 6. objective-c保留,分配和複製?
- 7. iPhone,方法返回+1保留計數的客觀c對象
- 8. @property並保留,分配,複製,非原子Objective-C
- 9. EXC_BAD_ACCESS複製或保留塊
- 10. 複製並粘貼我的xib文件並保留參考
- 11. 客觀的C系列,保持獨特
- 12. 在客觀C++
- 13. 客觀C - 排列重複計算
- 14. 只保留觀察連續
- 15. 客觀C:製作點長按
- 16. 複製不覆蓋並保留擴展名的現有文件
- 17. Windows批處理文件複製並保留副本
- 18. 從.xib複製到.storyboard並保留IBOutlet連接
- 19. 複製Sharepoint文件夾並保留權限
- 20. VB:將Excel單元複製到Word並保留Excel格式
- 21. 將div內容複製到新窗口並保留樣式?
- 22. 從Word複製並在Redactor II中保留格式
- 23. 如何從Kindle PC複製代碼並保留格式
- 24. 複製的圖像,並保留其EXIF/IPTC數據與PHP imageCreateFromJpeg?
- 25. 如何克隆/複製模型實例並保留其關聯?
- 26. 在Python中複製文本並保留/查找特殊字符
- 27. 如何複製UIElement並保留佈局/渲染信息?
- 28. CentOS7:複製文件並保留SELinux上下文
- 29. shared_ptr的/客觀-C
- 30. '||'在客觀的C?
[NSString property:copy or retain?](http://stackoverflow.com/questions/387959/nsstring-property-copy-or-retain)或[Objective C Assign Copy Copy Retain](http:/ /stackoverflow.com/questions/4510913/)或[保留自動釋放對象的副本](http://stackoverflow.com/questions/6416963/)或[何時使用保留和何時使用副本](http:// stackoverflow .com/questions/4087208 /)或[@property:Retain or copy?](http://stackoverflow.com/questions/5616170/)或[許多其他](http://stackoverflow.com/search?q= %5Bobjc%5D + copy + retain) –
在這個問題的辯護中,其他人都是特定於財產類型,但是,這個問題已經被問了很多。 –