2011-12-19 40 views
7

Tôi có một chút mới đối với Cocoa và tôi đã đọc khoảng NSIndexSet. Tại sao nó lại cần thiết? Dường như với tôi rằng NSIndexSet không là gì ngoài một số nguyên là NSSet, đúng không? Mục đích của việc tạo ra một bộ sưu tập riêng biệt là gì?Sự khác nhau giữa NSIndexSet và NSSet là gì?

Trả lời

12

Có một vài lý do: số nguyên

  1. NSIndexSet cửa hàng unsigned loại nguyên thủy, trong khi các cửa hàng NSSet đối tượng.
  2. NSIndexSet được tối ưu hóa để lưu trữ các số nguyên không dấu, cụ thể là tập hợp các số nguyên vào một cấu trúc dữ liệu khác như NSArray.
+1

Để xây dựng trên # 2, NSIndexSet cho phép bạn lặp qua các chỉ mục theo thứ tự hoặc theo thứ tự ngược lại. Một NSSet là không có thứ tự, và một NSOrderedSet được sắp xếp theo cách thủ công (có nghĩa là bạn có thể phá vỡ thứ tự bằng cách chèn một đối tượng ở vị trí sai). –

+0

OK. Một điều khác tôi vừa để ý. NSIndexSet thực sự sử dụng NSRange để lưu trữ các chỉ mục liên tiếp, thực sự rất được tối ưu hóa để lưu trữ giá trị chỉ mục vào các bộ sưu tập khác. – Tony

+0

Hoạt động trên 'NSSet' là O (1) (băm), trong khi hầu hết các hoạt động' NSIndexSet' là O (N) (vòng lặp). –

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