2011-02-08 6 views
7

Tôi biết rằng quy tắc chung là bạn chỉ nên nhập những gì cần thiết — giao diện lớp cơ sở, giao diện giao thức, v.v. —cho một lớp để biên dịch và sử dụng @class cho mọi thứ có thể được tuyên bố trước. Tuy nhiên, tôi chạy vào kịch bản sau đây trong đó tôi có cảm giác như #import là một giải pháp thích hợp hơn:Có luôn luôn không thích hợp để # import nhiều hơn mức cần thiết tuyệt đối trong các giao diện Objective-C không?

#import "ClassA.h"  // Previously, @class ClassA; 
#import "ClassB.h"  // Previously, @class ClassB; 
#import "ClassC.h"  // Unnecessary to forward-declare 

@interface ClassD : NSObject 

@property (nonatomic, retain) ClassA * classAObject; 
@property (nonatomic, retain) ClassB * classBObject; 
@property (nonatomic, copy) NSArray * classCObjects; 

@end 

Lúc đầu, tôi chỉ đơn giản là chuyển tiếp tuyên bố ClassAClassB (như các thành phần của classCObjects là của ClassC chỉ theo hợp đồng). Đây là bản năng ban đầu của tôi.

Nhưng sau khi cố gắng sử dụng ClassD nơi khác, tôi nhanh chóng nhận ra rằng tôi cũng đã nhập khẩu ClassA, ClassB, và ClassC cùng với ClassD ở khắp mọi nơi tôi đã sử dụng nó. Điều này có vẻ giống như một cái gì đó mà một lớp khác không nên quan tâm khi sử dụng ClassD. Suy nghĩ của tôi là, về cơ bản, người dùng của ClassD thực sự chỉ nên quan tâm đến việc nhập ClassD.h và giả sử nó có thể hoạt động với toàn bộ lớp mà không có một loạt các tuyên bố khác #import. Với cách tiếp cận trên, về cơ bản tôi đã bao gồm mọi thứ cần thiết để hoạt động trong miền ClassD ngay trong giao diện của nó.

Có lý do chính đáng khiến cách tiếp cận này không lý tưởng, ngoại trừ "bạn đã bao gồm nhiều hơn là hoàn toàn cần thiết cho việc biên soạn?"

Trả lời

10

Mặc dù chiến lược bạn thường theo dõi-- không nhập nhiều hơn mức cần thiết - tuyệt vời, phong cách sang trọng và một điều tuyệt vời để nhắm đến, không làm đổ mồ hôi các trường hợp phức tạp quá nhiều. Chỉ cần #import những gì bạn cần.

Trong thực tế, trên một máy hiện đại, hiệu ứng duy nhất trên #import ing sẽ có là thêm một vài micro không thể truy cập vào thời gian biên dịch của bạn. Sử dụng thời gian của nhà phát triển bạn sẽ tiết kiệm được để làm cho ứng dụng của bạn trở nên khủng khiếp. :)

+0

+1: những gì tôi đang trong quá trình nói, nhưng nói tốt hơn :) – Mac

+0

Đó là những gì tôi nhận ra, nhưng tôi muốn đảm bảo rằng tôi không vi phạm một số hiệu trưởng thiết kế quan trọng hơn. Làm việc cho tôi. :) – LucasTizma

+1

'# import' có thể là cải tiến tốt nhất so với thẳng C mà Obj-C cung cấp. ;) Sử dụng nó, yêu nó, và không đổ mồ hôi nó. Đó là cách tôi lăn, dù sao đi nữa. Chúc may mắn. –

1

Là một lập trình viên, bạn nên tiếp tục khai báo các lớp học ở nơi có thể. Nó làm giảm đáng kể thời gian biên soạn cho các dự án lớn. Nhưng dành quá nhiều thời gian vào nơi để chuyển tiếp tuyên bố không phải là bất kỳ cách nào sẽ giúp bạn thiết kế một ứng dụng hấp dẫn rất tốt. Vì vậy, nếu bạn có thể chuyển tiếp tuyên bố , hãy làm như vậy nhưng nó không phải là.