2011-07-29 27 views
18

Có sự khác biệt trong làm@class làm gì trong phát triển iOS 4?

@class MyViewController; 

chứ không phải là làm việc nhập khẩu bình thường của .h vào appdelegate.h

#import "MyViewController.h" 

Tôi đã nhìn thấy một số ví dụ gần đây sử dụng cách @class và tự hỏi liệu có bất kỳ sự khác biệt nào không.

cảm ơn.

+0

có thể câu hỏi tương tự này có thể giúp: [http://stackoverflow.com/questions/322597/class-vs-import](http://stackoverflow.com/questions/322597/class-vs-import) –

Trả lời

21

Có một sự khác biệt lớn.

@class MyViewController; 

Là tờ khai chuyển tiếp cho đối tượng MyViewController. Nó được sử dụng khi bạn chỉ cần nói cho trình biên dịch về một kiểu đối tượng nhưng không cần phải bao gồm tệp tiêu đề.

Tuy nhiên, nếu bạn cần tạo một đối tượng của loại hình này và gọi các phương pháp trên đó, bạn sẽ cần phải:

#import "MyViewController.h" 

Nhưng thường này được thực hiện trong các tập tin .m.

Việc sử dụng bổ sung các tờ khai chuyển tiếp là khi bạn xác định @protocol trong cùng một tệp tiêu đề làm đối tượng sử dụng nó.

@protocol MyProtocolDelegate; //forward declaration 

@interface MyObject { 
    id<MyProtocolDelegate> delegate; 
    ... 
} 
... 
@end 

@protocol MyProtocolDelegate 
    ... //protocol definition 
@end 

Trong ví dụ trên trình biên dịch cần phải biết rằng @protocol MyProtocolDelegate là hợp lệ trước khi nó có thể biên dịch đối tượng MyObject.

Chỉ cần di chuyển định nghĩa giao thức ở trên định nghĩa MyObject cũng sẽ hoạt động.

6

@class cho phép bạn khai báo rằng biểu tượng là tên lớp Objective-c mà không cần #import tệp tiêu đề xác định lớp.

Bạn sẽ sử dụng điều này khi bạn chỉ cần tên lớp được xác định cho mục đích khai báo con trỏ đến lớp hoặc tham số phương thức của lớp và bạn không cần truy cập bất kỳ phương thức, trường hoặc thuộc tính nào trong lớp học.

Nó tiết kiệm một lượng nhỏ thời gian biên dịch so với #import và đôi khi giúp tránh lộn xộn bao gồm các vấn đề về vòng tròn.

[Và, như rjstelling chỉ ra, đó là đôi khi hữu ích mà bạn đã khai báo xen kẽ và bạn cần phải "chuyển tiếp tuyên bố" một cái gì đó.]

+0

Đó là tuyệt vời, cảm ơn vì lời giải thích. – user868830

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