2010-04-02 38 views
7

Tôi có một bài hát lớp với các thuộc tính Tiêu đề, Khóa, Nghệ sĩ, v.v. Không có phương pháp. Tôi lặp qua một cơ sở dữ liệu thông tin bài hát và tạo một đối tượng Song cho mỗi, điền các thuộc tính, và sau đó lưu trữ các đối tượng Bài hát trong một NSArray.Mục tiêu C Class hoặc cấu trúc?

Sau đó, tôi nghĩ, tại sao không chỉ có một Song cấu trúc với tất cả những đặc tính tương tự thay vì một bài hát lớp. Làm như vậy sẽ loại bỏ các tệp lớp, dòng #import Song trong tệp .m của lớp đang sử dụng và cần phân bổ, init, phát hành.

Mặt khác, tôi phải đặt định nghĩa cấu trúc trong mọi lớp có thể cần. (Trừ khi có một số vị trí có thể truy cập toàn cầu - ở đó?) Ngoài ra, một cấu trúc có thể được lưu trữ trong NSArray không?

Trả lời

18

Tôi sẽ làm điều đó với một lớp học. Một cấu trúc không thể được lưu trữ trong một NSArray (hoặc bất kỳ lớp container nào khác cho vấn đề đó), trừ khi bạn bọc nó trong một NSValue, có thể được thực hiện nhưng hơi khó sử dụng.

Ngoài ra, như bạn đã chỉ ra, bạn phải xác định cấu trúc ở đâu đó. Cách bình thường là định nghĩa nó trong một tệp header (.h) giống như cho một lớp. Vì vậy, không có 'tăng' từ một cấu trúc ở đó.

+0

Tuyệt vời, bây giờ tôi biết. –

+1

Một cấu trúc có thể được lưu trữ khá hiệu quả trong một NSPointerArray mà không có NSValue (bạn phải mô tả cấu trúc bằng cách sử dụng các hàm khác nhau). Nhưng theo ARC, các cấu trúc không còn có thể chứa các đối tượng, chẳng hạn như NSString: bạn phải truyền một cái gì đó giống như một tên bài hát cho một char, điều này làm cho cấu trúc ít hữu ích hơn nhiều. Vì vậy, tôi đang thay đổi lớp học. –

2

Nó có thể đi cả hai cách nhưng tại sao không tách mối quan tâm của bạn và giữ nó trong tập tin lớp học riêng của nó? Thêm vào đó, làm như vậy là phù hợp hơn với Nguyên tắc trách nhiệm duy nhất của SOLID. Tại sao cho lớp học chính của bạn nộp một lý do khác để thay đổi? Phá vỡ nó ra.

+0

Cảm ơn, điểm tốt. –

6

Bạn không thể lưu trữ cấu trúc trong NSArray (xem các chữ ký của các phương thức của nó - tất cả đều lấy và trả về các đối tượng). Nhưng bên cạnh đó, như tôi đã nói trong câu trả lời cho another recent question, việc đặt các đối tượng trong cấu trúc chỉ là về luôn luôn là một ý tưởng tồi. Các đối tượng cần được giữ lại và phát hành và các cấu trúc không có mã liên kết với chúng để đảm bảo điều đó xảy ra vào đúng thời điểm. Điều này có ý nghĩa hơn như một đối tượng mô hình.

+0

Cảm ơn, điểm tốt. –

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