2009-07-21 22 views
6

Tôi khá mới với Objective-C và đã tự hỏi cách tốt nhất để quản lý bộ sưu tập các bộ dữ liệu là gì. Trong C tôi sẽ sử dụng một mảng 2D hoặc một cấu trúc.Quản lý bộ sưu tập các bộ dữ liệu trong Objective-C

Tôi có nên tạo đối tượng để chứa các bộ dữ liệu này không? Nó có vẻ như quá mức cần thiết để chỉ phân loại danh sách hoặc là không có tải thêm thực được tạo ra bởi khởi tạo đối tượng?

Trả lời

12

Chắc chắn có một số chi phí trong quá trình tạo đối tượng. Đối với một số lượng nhỏ các đối tượng, sau đó sử dụng cấu trúc dữ liệu ObjC vẫn còn phù hợp. Nếu bạn có một số lượng lớn các bộ dữ liệu, tôi sẽ quản lý chúng trong một mảng C của các cấu trúc. Hãy nhớ rằng, Objective-C thực sự chỉ C. Nó là thích hợp và phổ biến để sử dụng C cấu trúc trong Objective-C (đến một điểm; học tập mà điểm đó là đại diện cho một mốc quan trọng trong việc trở thành một nhà phát triển Objective-C tốt).

Thông thường đối với loại cấu trúc dữ liệu này, tôi có lẽ sẽ tạo một đối tượng Objective-C duy nhất quản lý toàn bộ bộ sưu tập. Vì vậy, người gọi bên ngoài sẽ thấy một giao diện Objective-C, nhưng dữ liệu nội bộ sẽ được lưu trữ trong một cấu trúc C hiệu quả hơn.

Nếu truy cập nhanh rất nhiều bộ dữ liệu, đối tượng thu thập của tôi có thể sẽ cung cấp các phương thức "get" tương tự như [NSArray getObjects:range:]. Phương thức ObjC bắt đầu bằng "get" cho biết tham số đầu tiên là một con trỏ sẽ được ghi đè bởi phương thức. Điều này thường được sử dụng để truy cập giống như C hiệu suất cao cho những thứ được quản lý bởi một đối tượng ObjC.

Đây là loại cấu trúc dữ liệu là chính xác cách phát triển ObjC hợp nhất sự tinh tế và khả năng bảo trì của ObjC với hiệu suất và đơn giản của C.

1

Tôi nghĩ bạn sẽ phải giải quyết một đối tượng NSArray của NSArray, hoặc có thể là một NSArray của các đối tượng NSDictionary. Bạn luôn có thể cuộn lớp riêng của bạn, hoặc làm điều đó theo cách mà bạn sẽ làm gì trong C.

1

Có một vài cách khác nhau bạn có thể quay về vấn đề này:

  1. CoreData. Mặc dù nó không phải là một cơ sở dữ liệu về mặt kỹ thuật, nhưng nó có thể hoạt động rất giống một. Nếu bạn không cần sự kiên trì giữa các lần chạy ứng dụng, hãy xem xét sử dụng loại lưu trữ NSInMemoryStoreType, trái ngược với một NSSQLiteStoreType hoặc tùy chọn khác. Tuy nhiên, nếu bạn muốn tham gia các bộ dữ liệu với nhau, sử dụng CoreData sẽ hoàn toàn không hoạt động (điều này, IMO, là lý do chính tại sao CoreData là không phải là một cơ sở dữ liệu).
  2. Sử dụng cơ sở dữ liệu thực. Các tàu SQLite trên mọi máy Mac và iPhone và khá dễ sử dụng nếu bạn sử dụng các trình bao bọc như FMDB hoặc SQLite Persistent Objects hoặc PLDatabase hoặc EGODatabase hoặc GTMSQLite wrapper by Google.
  3. Tuple thực sự chỉ là tập hợp các cặp khóa-giá trị, vì vậy bạn chỉ có thể sử dụng NSMutableArray của NSMutableDictionaries. Bạn rõ ràng sẽ không nhận được sử dụng cú pháp SQL, và bất kỳ tham gia/truy vấn bạn phải chạy chính mình, nhưng điều này chắc chắn sẽ có các thiết lập dễ dàng nhất.
  4. Viết một lớp tuple và lưu trữ chúng trong một NSMutableArray (tương tự như # 3, chỉ thực thi một tập hợp các thuộc tính chung trên các bộ dữ liệu của bạn).
+5

Tại sao bạn sẽ sử dụng một cơ sở dữ liệu để có tuples? – George

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