2009-03-27 39 views
5

Tôi đang học Objective-C qua Cocoa (Và yêu thích nó). Tôi đang theo một hướng dẫn. Có một lớp được gọi là Menu và giao diện trông giống như thế này.Sự nhầm lẫn định nghĩa lớp C mục tiêu

@interface Menu: MenuObject {} 
@end 

@interface MenuLayer : LayerObject {} 
-(void) someMethod:(id)sender 
-(void) someOtherMethod:(id)sender 
@end 

và triển khai theo các quy ước cùng

@implementation Menu 
    -(id)init{ 
     // blah blah blah 
    } 
@end 

@implementation MenuLayer 
    // init, someMethod and someOtherMethod stuff here 
@end 

nào để tôi trông giống như hai đối tượng riêng biệt/classes được xác định và thực hiện trong các tập tin tương tự. Có lý do để làm điều này không? Kết quả sẽ giống nhau không nếu tôi chia các tệp .h và .m thành Menu.h/.m và MenuLayer.h/.m? Hay tôi hiểu lầm điều gì đó cơ bản?

Trả lời

5

Sẽ ổn nếu bạn chia chúng thành các tệp riêng biệt. Hầu hết thời gian khi bạn nhìn thấy mọi thứ được thực hiện theo cách đó chỉ vì 2 lớp được kết hợp chặt chẽ với nhau đến mức bạn sẽ thực sự không bao giờ sử dụng cái nào mà không có cái kia.

Vì vậy, nó thực sự chỉ là một điều phong cách. Không có "ma thuật" cho thực tế là cả hai đều được xác định và thực hiện trong cùng một tập tin.

+0

Ngoài ra, rất nhiều hướng dẫn và sách đặt giao diện và triển khai trong cùng một tệp để tiết kiệm không gian trang và/hoặc trì hoãn thảo luận về bao gồm và .h/.m cho đến sau này. –

3

Đây chỉ là vấn đề sở thích cá nhân. Bạn sẽ có thể chia chúng ra, miễn là bạn #import một trong các tiêu đề từ người khác nếu cần thiết. Mục tiêu-C chỉ cung cấp cho bạn sự lựa chọn để nhóm các lớp với nhau trong các tập tin, chứ không phải là Java mà buộc bạn phải phân chia chúng. Nếu các lớp có liên quan chặt chẽ, có thể dễ dàng hơn để xem toàn bộ công việc hoạt động như thế nào trong một tệp, thay vì phải chuyển đổi giữa các lớp.

1

Đánh giá của bạn là chính xác. Hai lớp riêng biệt đang được khai báo và xác định.

Lý do có khả năng thực hiện việc này là cả hai lớp được yêu cầu để làm bất cứ điều gì mà Menu thực hiện. Có cả hai lớp trong cùng một tiêu đề và nguồn chỉ làm cho giao diện nhỏ gọn hơn.

Tách nó thành hai tệp sẽ vẫn hoạt động.

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