2012-07-04 32 views
15

Câu hỏi này thực sự là cơ bản. Sự khác nhau về hiệu suất giữa việc xóa một số UIView từ phân cấp chế độ xem và ẩn một số UIView là gì?Hiệu suất của UIView: removeFromSuperview VS ẩn

Tôi đã đọc rằng các Chế độ xem không cần thiết phải được xóa khỏi cấu trúc phân cấp chế độ xem. Hiện tại tôi có tình huống có thể nhìn thấy UIButton. Khi nào tôi ẩn số UIButton và khi nào tôi xóa nó khỏi người giám sát?

Việc thay đổi cấu trúc phân cấp có tốn kém không?

Trả lời

1

Nếu bạn cần thay đổi giữa hiển thị và ẩn chế độ xem phụ, cách tiếp cận tốt nhất chắc chắn là ẩn nó. Đối với một UIButton ý nghĩa bộ nhớ không phải là tuyệt vời anyway. Và mã này chắc chắn đơn giản hơn nếu bạn chỉ cần chuyển đổi thuộc tính hidden.

Ngoài ra, bạn nhận được lợi thế bổ sung là thuộc tính hidden có thể hoạt hình!

+0

Vì vậy, sự khác nhau giữa hiển thị UIView ẩn và không có chế độ xem đó trong cấu trúc phân cấp chế độ xem là gì? Có sự khác biệt nào không? – bas

+0

Có. Trong trường hợp nó đã được gỡ bỏ, bạn về cơ bản là tái tạo nó từ đầu. Điều này có thể tốt cho quản lý bộ nhớ, nhưng nó có thể là xấu cho hiệu suất, và ít đẹp như bạn không thể animate sự thay đổi. – Mundi

+0

Vâng, nếu bạn giữ một tham chiếu đến xem nó không phải được tái tạo. Tôi đã quan tâm đến chi phí của việc thay đổi hệ thống phân cấp khung nhìn. Kích hoạt thay đổi này là gì. Tôi tưởng tượng rằng nó cơ bản thay đổi cấu trúc cây mà UIKit đang quản lý như là một đại diện của hệ thống phân cấp khung nhìn. Bạn có nghĩ đó là chính xác không? – bas

7

Tôi đã thử nghiệm trên iPad6 iPad mini, với chế độ xem cuộn lớn có nhiều nội dung phong phú (bao gồm hình ảnh, đổ bóng, lớp gradient, hình nền hoa văn, bạn biết đấy, những nhà thiết kế đó :)) và Tôi thấy rằng view.hidden = YES ≠ [view removeFromSuperview]. Tôi đã nghĩ rằng thiết lập ẩn thành YES sẽ làm cho chế độ xem không được hiển thị/rút ra, do đó có nhiều lượt xem bị ẩn sẽ không ảnh hưởng đến hiệu quả. Nhưng kết quả thực tế là: 1) nếu tôi đặt chế độ xem màn hình ngoài ở chế độ xem cuộn lớn để ẩn (và bỏ ẩn chúng khi chúng trở lại vùng hiển thị), thì cuộn không mượt mà/liên tục chút nào. Khi nó giảm tốc một cách tự nhiên, nó trông có vẻ rất lộng lẫy. 2) nếu tôi xóa các chế độ xem màn hình khỏi chế độ xem cuộn (nhưng vẫn giữ trong bộ nhớ với một mảng theo dõi, vì vậy khi chúng trở lại chúng có thể được thêm ngay lập tức), việc di chuyển rõ ràng mượt mà hơn.

+2

Điều đó thực sự khiến tôi nhắc lại thực tế là đặt UIView thành 'ẩn' sẽ tiết kiệm được việc hiển thị và có thể tăng hiệu suất theo một cách nào đó. Chắc chắn, sự tăng vọt là từ làm cho nó 'unhidden' mà có thể buộc một setNeedsDisplay cùng với một setNeedsLayout (không chắc chắn về sau này), mà sẽ góp phần làm chậm. Đối với một tableview nó có thể là một ý tưởng tồi, nhưng đối với một cái nhìn lớn hơn 'đằng sau' quan điểm khác, nó có thể là một ý tưởng tốt để ẩn nó để nó không kích hoạt vẽ lại không cần thiết khi không cần thiết. – strange