2011-11-10 22 views

Trả lời

15

Bạn có thể sử dụng nó để thông báo cho AppKit rằng NSView lớp con của bạn -drawRect: dụ phương pháp thể được gọi từ một sợi thứ cấp.

Đó là 10.6+. Khi/nếu AppKit hiển thị chế độ xem không đồng bộ, -drawRect: được thực hiện bằng cách sử dụng các khối đồng thời và -drawRect: của bạn sẽ được gọi từ chuỗi phụ. Điều này có nghĩa là việc triển khai lớp con của bạn phải là luồng an toàn (cho khả năng tương thích, nó được tắt theo mặc định).

Xem thêm -[NSView setCanDrawConcurrently:] để biết chi tiết, vì có một số điều cần thiết để thực sự bật hành vi này. Đồng thời, không nên ngụ ý rằng AppKit là chủ đề an toàn hoặc các lớp con NSView được thiết kế để hỗ trợ chức năng này - Nó được thiết kế cho bản vẽ nặng của bạn.

+2

Lưu ý rằng đối với OS X 10.8 và iOS 6.0, việc thiết lập thuộc tính 'drawsAsynchronously' mới trên lớp của khung nhìn có thể cung cấp đủ hiệu suất mà không có sự phức tạp của việc tạo ra' drawRect: 'thread-safe. Trên OS X, bạn sẽ cần sử dụng chế độ xem được hỗ trợ lớp để sử dụng 'drawsAsynchronously'. –

+0

@robmayoff mẹo hay +1. bạn có cơ hội đo lường điều này hoặc bắt gặp một bài viết hay không? tôi đã viết các trình kết xuất đồng thời luồng đồng thời trong một thời gian. tôi nghĩ đó là một khu vực mà nhiều người muốn tránh :) – justin

+1

Tôi chưa từng chơi với nó. Hiệu suất * Tối ưu hóa đồ họa 2D và hiệu ứng hoạt hình * từ [WWDC 2012] (https://developer.apple.com/videos/wwdc/2012/) thảo luận về nó, bắt đầu từ khoảng 31m24s. –

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