Tôi biết những điều cơ bản về quản lý bộ nhớ, nhưng không phải là nội bộ của cách iOS xử lý các kiểu dữ liệu khác nhau. Một cái gì đó luôn khiến tôi nhớ rằng tốt nhất là sử dụng một số NSData
và NSMutableData
hoặc NSString
thay vì một số NSMutableString
. Có thực sự bất kỳ sự khác biệt hiệu suất trừ khi mã sẽ được chạy trong một vòng 10k hoặc tôi lãng phí thời gian của tôi?Giá trị chuyển đổi NSMutable <T> thành NS <T>
Trả lời
Sử dụng các loại có thể thay đổi mà bạn muốn có thể thay đổi nội dung tại chỗ. Sử dụng các loại bất biến khác.
Trong một số trường hợp, bạn không có lựa chọn - chẳng hạn như đối tượng dữ liệu chứa dữ liệu trả về từ NSURLRequest: Sử dụng đối tượng dữ liệu có thể thay đổi dễ dàng hơn nhiều so với việc tạo nhiều loại dữ liệu không thay đổi cuối cùng.
Sau đó, hãy chạy mã của bạn thông qua trình hồ sơ và xem bạn có nên làm gì khác đi không. tức là chi phí tạo ra các loại bất biến mới để giữ các đối tượng hiệu quả hơn là sử dụng loại có thể thay đổi. Bất cứ điều gì khác là một tối ưu hóa sớm.
Giống như bạn đã nói giá trị duy nhất của nó nếu bạn gọi sử dụng Mutable nhiều lần. Nhưng nếu bạn gọi nó chỉ một vài lần thì đây không phải là vấn đề.
Bạn nên suy nghĩ về các lựa chọn thay thế, ví dụ: trong một phương thức TableViews cellForRowAtIndexPath:
lớn hơn. Sử dụng [NSString stringWithFormat:@"%@%@", fristString, secondString]
, thay vì *foo = [[NSMutableString alloc] init]
và [foo append:firstString]
v.v.
Bảng Xem làm ví dụ dường như không có ý nghĩa nhiều vì bộ nhớ đệm và sử dụng lại ô và hiển thị chỉ các ô hiển thị. – vikingosegundo
Không có gì cả, những gì tôi quan tâm nếu bạn xây dựng Chuỗi sẽ hiển thị qua NSMutableString. –
Tôi không hiểu điểm của bạn. Các tableview được thay đổi chỉ một lần cho mỗi runloop - vì vậy không phải là rất thường xuyên. – vikingosegundo
- 1. chuyển đổi & lt thành <xml document
- 2. Chuyển đổi thành IEnumerable <dynamic>?
- 3. Chuyển đổi giá trị được phân cách bằng dấu phẩy thành Danh sách <Long>
- 4. Giá trị chuyển đổi loại <T> thành Biến thể, có thể không?
- 5. Không thể chuyển đổi Danh sách <KeyValuePair <...,...>> thành IEnumerable <object>?
- 6. Chuyển đổi bộ <Map.Entry <K, V>> thành HashMap <K, V>
- 7. Chuyển đổi từ JsArray <JavaScriptObject> thành Danh sách <JSONObject> trong GWT
- 8. C# Chuyển đổi Danh sách <string> thành Từ điển <string, string>
- 9. Chuyển đổi Danh sách <MyObject> thành Từ điển <obj.string, Danh sách <obj.ID>>
- 10. Không thể chuyển đổi hoàn toàn loại 'System.Collections.Generic.List <T>' thành 'System.Linq.IQueryable <T>'
- 11. Danh sách chuyển đổi <boolean> thành chuỗi
- 12. Cách thay đổi giá trị <select> từ JavaScript
- 13. chuyển đổi giá trị kép thành giá trị nhị phân
- 14. Cách chuyển đổi Expr <'a -> 'b> thành Biểu thức <Func <'a, obj>>
- 15. Chuyển đổi giá trị int thành unicode
- 16. Chuyển đổi/Truyền IEnumerable thành IEnumerable <T>
- 17. Chuyển đổi IEnumerable <int> thành int []
- 18. Chuyển đổi mảng chuỗi thành Danh sách <string>
- 19. Chuyển đổi mảng thành HashSet <T> trong .NET
- 20. Chuyển đổi ArrayList <Characters> thành một chuỗi
- 21. Chuyển đổi Danh sách <images> thành tệp video?
- 22. chuyển đổi chuỗi thành arraylist <Character> trong java
- 23. Chuyển đổi ArrayList <Byte> thành một byte []
- 24. Chuyển đổi Vector <Point> thành Mat
- 25. Chuyển đổi std :: string thành std :: vector <char>
- 26. Không thể chuyển đổi hoàn toàn loại IEnumerable <T> thành IQueryable <T>
- 27. Danh sách chuyển đổi <Integer> thành Danh sách <String>
- 28. Chuyển đổi Danh sách <T> thành một ObservableCollection <T>
- 29. Không thể ngầm chuyển đổi loại 'System.Linq.IQueryable <>' thành 'System.Linq.IOrderedQueryable <>'
- 30. Tại sao thẻ "<br />" của tôi bị chuyển đổi thành "< br/>"?
Tôi thực sự đang nói về khi tôi có dữ liệu mà tôi đã thao tác trong một phương pháp và tôi chuyển nó qua một phương thức khác. – Echilon
@Echilon Như tôi đã nói, nó phụ thuộc vào những gì bạn đang làm. Nếu phương pháp mà bạn đang trả về dữ liệu cần phải sửa đổi nó tại chỗ, trả về một đối tượng có thể thay đổi. Cá nhân, tôi có xu hướng giữ các kiểu dữ liệu không thay đổi khi tôi truyền chúng đi. Tôi thích các loại bất biến cho các thuộc tính càng nhiều càng tốt. Giữ cho các chủ đề an toàn hơn nhiều, và trong trường hợp các giá trị được lấy từ các vị trí khác nhau, nó giúp việc gỡ lỗi dễ dàng hơn. các nhóm lớp có thể thay đổi/không thay đổi có các phương thức 'copy' và' mutableCopy' rất tiện dụng cho việc này. – Abizern
Câu đầu tiên ở đây là chìa khóa: suy nghĩ về những gì bạn muốn làm với dữ liệu. Nếu nó cần phải được biến đổi, sau đó làm cho nó có thể thay đổi. –