bất kỳ ai có thể vui lòng giải thích cho tôi những gì khai báo @class làm trong mục tiêu & các trường hợp mà chúng ta nên sử dụng khai báo này là gì.@class làm gì trong Objective-C?
Trả lời
Đó là tuyên bố chuyển tiếp. Về cơ bản nó nói với trình biên dịch rằng có một lớp của tên đó. Tôi sử dụng nó trong tờ khai giao diện:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Tất nhiên bạn có thể nhập tiêu đề cho Foo
thay vì:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Nhưng nếu someFoo
không tiếp xúc với người sử dụng Bar
, họ sẽ nhập một tiêu đề phụ tệp không sử dụng chúng. Với tuyên bố @class
, người dùng của Bar
sẽ không nhập thêm, vì Foo.h
sẽ được nhập trong tệp triển khai Bar
.
nó được gọi là tuyên bố chuyển tiếp.
bạn sử dụng chỉ thị này để cho trình biên dịch biết rằng có một lớp objc có tên được chỉ định. các tùy chọn khác của bạn là bao gồm giao diện hoặc sử dụng id cho các biến hoặc loại.
điều này hữu ích để giảm thiểu sự phụ thuộc. tôi sử dụng chúng bất cứ khi nào tôi có thể để giảm thiểu phụ thuộc, và giảm đáng kể thời gian xây dựng.
nó giống như trong C và C++:
struct mon_struct;
namespace MON { class mon_class; }
+1 để nghiêng rằng điều này nên được ưu tiên để giảm thời gian xây dựng. –
@class
được sử dụng để tạo ra tuyên bố bất kỳ lớp. Nếu bạn đang tạo bất kỳ lớp nào mà việc triển khai thực hiện không được biết cho bạn thì bạn có thể thực hiện điều này bằng cách sử dụng chỉ thị biên dịch @class
.
Bạn có thể triển khai lớp này khi triển khai được bạn biết.
hy vọng điều này sẽ giúp ít hơn
Câu trả lời trên đã nêu rõ hầu hết mọi thứ, tôi muốn thêm một số điều vào đó.
@class Foo
là khai báo chuyển tiếp của lớp Foo. Nó giống như nói với trình biên dịch, lớp foo tồn tại Vậy đừng bận tâm về nó ngay bây giờ.
Lưu ý: - Khai báo lớp học trở nên rất quan trọng khi cả hai lớp cần nhau. nếu chúng ta thực hiện câu lệnh #import bình thường thì chúng ta sẽ có một vòng lặp nhập khẩu vô tận và Trình biên dịch không thích các vòng lặp vô tận. Vì vậy, chúng tôi sử dụng @class Classname
.
- 1. ObjectiveC Parse Integer từ chuỗi
- 2. Class ClassName <:: OtherClassName làm gì trong Ruby?
- 3. @class làm gì trong phát triển iOS 4?
- 4. "class:" có nghĩa là gì trong C++?
- 5. .class nghĩa là gì trong Java?
- 6. ObjectiveC UISwitch đặt mặc định thành OFF
- 7. ObjectiveC: nơi khai báo các đặc tính cá nhân?
- 8. Cách tách dòng mới khỏi NSString trong ObjectiveC
- 9. nhận lỗi "invalid_client" trong mẫu gdata-objectivec-client
- 10. Sự khác nhau giữa [Class new] và [[Class alloc] init trong iOS là gì?
- 11. Sự khác nhau giữa Class clazz và Class <?> clazz trong java là gì?
- 12. Tương lai của Class :: DBI là gì?
- 13. đối tượng Class (java.lang.Class) là gì?
- 14. "const class" có nghĩa là gì?
- 15. Singleton Class trong Flex
- 16. Làm thế nào để có được Class Array cho một Class nhất định trong Java?
- 17. ObjectiveC loại không được nhập khẩu nhưng vẫn chạy mã
- 18. Trợ giúp với mã GCC và ObjectiveC và Cygwin
- 19. Sử dụng Generics trong Class
- 20. Những gì hiện <a href="#" class="view"> mean?
- 21. Nghĩa là gì .class nghĩa là sau tên lớp
- 22. Tại sao "[self class] == [super class]"?
- 23. Object [] để Class [] trong Java
- 24. exceptionoverflow exception trong form class
- 25. Map bởi Class trong Dart
- 26. Mục đích của FeedReaderContract là gì và cách xác định lớp bên trong trong OpenHelper Class
- 27. Tạo một bong bóng màu/vòng tròn lập trình trong ObjectiveC và Cocoa
- 28. Làm thế nào để khai báo một giá trị enum như đang bị phản đối trong ObjectiveC (2.0)
- 29. Đang cập nhật tệp .class trong jar
- 30. Làm thế nào để sử dụng arrayWithContentsOfFile để tải tập tin văn bản thành công với writeToFile trong ObjectiveC/XCode
Giải thích rõ ràng, Chỉ cần tìm hiểu điều gì đó mới mẻ! Cảm ơn bạn – pnizzle
Tôi vẫn không hiểu nó đầy đủ và tôi biết một bài cũ của nó, nhưng và ví dụ sẽ là tốt. Những gì bạn có ý nghĩa của "Người dùng của Bar", các lớp học sẽ có thanh như một đối tượng trong đó? Imean trong ví dụ của bạn Foo là một đối tượng trong Bar. Vì vậy, sự khác biệt giữa #import và @class trong tình huống này? – Esko918
Thực sự là một lời giải thích tuyệt vời. Tôi phải đối mặt với một tình huống trước đó, nơi tôi nên sử dụng nó. Dù sao, bây giờ tôi chắc chắn có thể. :) – Ron