2012-01-02 29 views
5

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ố NSDataNSMutableData 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

3

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.

+0

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

+0

@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

+1

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. –

0

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][foo append:firstString] v.v.

+0

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

+0

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. –

+0

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

Các vấn đề liên quan