2009-04-20 27 views
8

Đây là câu hỏi rất mới mẻ, nhưng API iPhone có cung cấp bất kỳ cấu trúc dữ liệu nào để làm việc (tức là danh sách được liên kết, bản đồ băm, v.v.) không?Phát triển iPhone: Loại cấu trúc dữ liệu nào có sẵn?

+0

Lưu ý rằng 'NS (Mutable) Array' không nhất thiết lưu trữ con trỏ đối tượng trong một mảng kiểu C. Nó tự động thay đổi biểu diễn bên trong của nó giữa một mảng kiểu C, một danh sách liên kết và bất kỳ số lượng cấu trúc nào khác dựa trên cách bạn sử dụng nó. –

Trả lời

18

Bạn có thể sử dụng mọi cấu trúc dữ liệu được triển khai trên C hoặc C++ bằng iPhone SDK. Ví dụ: Tôi sử dụng standard library rất nhiều.

Bên cạnh đó, bạn cũng có thể sử dụng cấu trúc dữ liệu phức tạp Cocoa của có sẵn như:

  1. NSArray
  2. NSDictionary (băm)
  3. NSSet (set)

Bạn có thể có một người bạn đồng tài liệu trên chúng here.

+13

Kỹ thuật: Objective-C không cung cấp các lớp này — chúng là một phần của * Cocoa *. Mục tiêu-C chỉ là ngôn ngữ được sử dụng. Không phải là một thỏa thuận lớn, nhưng đó là một ý tưởng tốt để có được thói quen đề cập đến những điều này một cách chính xác. ;) – hbw

+1

Đồng ý. Sẽ thay đổi câu trả lời của tôi để phản ánh những gì bạn đang nói. Cảm ơn! –

-4

Ngôn ngữ mục tiêu-C không cung cấp bất kỳ cấu trúc dữ liệu vốn có nào như Danh sách được liên kết, vv Tuy nhiên, vì nó dựa trên codebase C/C++, mọi thứ có thể được thực hiện trong C hoặc C++ có thể được thực hiện trực tiếp trong Mục tiêu-C, bao gồm Danh sách liên kết và các cấu trúc dữ liệu khác.

+3

Mục tiêu-C là không có cách nào "dựa trên codebase C++." C, có, nhưng bất cứ điều gì C++ bạn phải đi ra khỏi con đường của bạn để sử dụng (và có phần masochistic) –

12

Ca cao (khung có sẵn trên cả Mac và iOS) triển khai several common collection types, bao gồm NSArray, NSDictionaryNSSet cũng như các biến thể có thể thay đổi của chúng. (Leopard cũng đã giới thiệu NSPointerArray, NSHashMapNSHashTable, một mảng/từ điển/được đặt bằng các tùy chọn bổ sung (như sử dụng tham chiếu yếu) khiến chúng trở nên khá thuận tiện để sử dụng trong môi trường thu thập rác. iPhone, và sẽ có chút ý nghĩa vào lúc này, vì iOS không hỗ trợ thu gom rác.) Các lớp này cực kỳ nhanh và phù hợp cho mục đích sử dụng chung trong mọi ứng dụng Cocoa. Ngoài các cấu trúc được cung cấp này, bạn có một số lựa chọn: (1) tạo ra các cấu trúc phức tạp hơn bằng cách sử dụng chúng làm khối xây dựng, (2) tận dụng mã của bên thứ ba hiện có hoặc (3) xây dựng cấu trúc dữ liệu của riêng bạn từ đầu.

Một tùy chọn là CHDataStructures.framework, một khung mục tiêu C nguồn mở mà tôi duy trì. Nó thực hiện một số cấu trúc dữ liệu phổ biến khác, chẳng hạn như stack/queue/deque, danh sách liên kết, tập hợp được sắp xếp và hơn thế nữa. Các cấu trúc này áp dụng NSCodingNSCopying (cộng với NSFastEnumeration trên 10.5+), vì vậy chúng hoạt động liền mạch với mã Mục tiêu-C gốc. Dự án cũng cho phép bạn xây dựng một thư viện tĩnh để sử dụng trên iPhone. Vì khung này là nguồn mở, bạn thậm chí có thể chỉ bao gồm mã có liên quan trực tiếp trong dự án của mình nếu cần.

Trong khi bạn có thể sử dụng cấu trúc C++ và STL, tôi thấy rằng việc trộn Objective-C và C++ có xu hướng khó hiểu hơn và dẫn đến lỗi gây tranh cãi, đặc biệt là đối với người mới. Đây không phải là một bash chống lại C + +, chỉ là một "khi ở Rome" nguyên tắc. Khi sử dụng C++, STL dĩ nhiên là cách tiếp cận ưa thích. Nếu bạn đã pha trộn trong C++, bạn có thể cảm thấy thoải mái với nó rằng STL có thể là một lựa chọn tốt; mặc dù vậy, tôi thấy rằng việc sử dụng các bộ sưu tập gốc của Cocoa tạo ra nhiều mã hiển nhiên hơn, dễ đọc hơn.

+3

Chắc chắn sẽ là tốt đẹp nếu những người cảm thấy cần downvote sẽ để lại một số thông tin phản hồi như * tại sao * họ cảm thấy một phản ứng là "không hữu ích" ... –

+1

Tôi không tin rằng NSHashMap, NSHashTable hoặc NSPointerArray có sẵn trên iphone. –

+1

Carl là đúng, và kể từ khi tôi đã không tìm thấy thông tin này bất cứ nơi nào khác trên SO, tôi muốn nói rõ ràng: NSHashMap, NSHashTable và NSPointerArray không có sẵn trong SDK iPhone. Xem câu hỏi này để biết mô tả cách sử dụng NSValue cho các con trỏ hộp: http://stackoverflow.com/questions/393662/does-using-lists-of-structs-make-sense-in-cocoa – Felixyz

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