类扩展名和头文件
回答
顾名思义,它们扩展了这个类。类延续是另一个名字。类扩展通常用于声明私有方法和属性。您希望类扩展名对@implementation
可见,并且不在头文件中(即,您希望类扩展名和@implementation位于MONClass.m
中)。
头文件中的类型和方法一般都是公开的 - 任何客户端都可以使用。
实例:类扩展声明的财产将不可见/给谁#import
头客户端访问,但它会是由@implementation
可用,因为@implementation
可以看到类扩展的声明。
所以这可以用来模拟你的ivars和方法的受限访问。这很有用,因为ObjC方法和属性不能指定为private/protected/public(例如使用@public
)。
类扩展与类别不同主要是因为扩展可能会声明存储(例如,将生成后备ivars的属性)。
谢谢你,这是解释它最有用的方法!特别是因为我用Java编程:) – golddove
A 标头文件(.h)
是您在现有类中公开声明属性,方法和协议的地方。然后你可以导入这个文件,当然可以用它来实现。
安扩展是另一个@interface
在您的执行(.m)
文件。这扩展了导入头的内部实现,添加了一些方法,如果有人或其他人导入与该类相关联的头文件,这些方法将不可用。
有关详细信息,请参阅Apple's documentation on customizing existing classes
问:What exactly are ... header files
答:头文件 - 是一个文件,其内容编译器的 '插入' 代替#import...
(#include
和其它类似的指示)线。头文件包含公共代码:类的前向声明,枚举,变量,函数和其他。
问:What exactly are class extensions …
答:Class Extension
- 是一个语言结构,它允许您扩展接口的类。
要更好地理解它是什么,您必须了解什么是类category
。
Category
- 是一种语言结构,它允许您向现有类添加功能(仅限方法!)。即使没有子类。
实施例:
可以添加新的方法来NSImage中:
@interface NSImage(YourExtensionName)
- (CGImageRef)CGImage;
@end
甲Class Extension
(也称为类延续,或unnamed category
)具有一些相似性类别,但它只能被添加到类在编译时你有源代码。
在class extension
中,您可以在通常的@interface
块中使用相同的东西。
问:What are difference
答:头文件用来包括到程序一些能力(结构,数据类型,常数,函数等等之一)。类扩展使用扩展现有的类与一些功能。通常,class extension
是一个类的私有接口。由class extension
声明的功能在原始类的@implementation块中实现,因此您不能在框架类(例如Cocoa或Cocoa Touch类,如NSString)上声明类扩展。
问:What is the difference between declaring a property/method in a header file vs in a class extension
答:如果你在头文件中声明属性/方法,然后.h文件中的任何用户都可以访问到该属性/方法。类扩展用于为您的类声明专用接口。
我强烈推荐给你看看苹果的Objective-C Programming Guide。
- 1. 文件扩展名和C#
- 2. 同一头文件中的类和类扩展(类别)
- 3. 文件扩展名
- 4. 文件扩展名
- 5. 文件扩展名
- 6. 文件扩展名[]
- 7. 文件扩展名
- 8. powershell - 提取文件名和扩展名
- 9. 解析带.php扩展名和php头的xml文件
- 10. SQLite:.db文件扩展名.sqlite文件扩展名为
- 11. 扩展文件类
- 12. 文件扩展名为MIME类型
- 13. 获取扩展类的文件名
- 14. 文本文件扩展名
- 15. bash:更改文件夹中所有头文件的扩展名
- 16. 将文件扩展名与文件头进行比较
- 17. 从头文件下载时缺少文件扩展名
- 18. UTI和文件扩展名关联
- 19. 如何拆分文件名和扩展
- 20. Flash player 10 Filereference.save和文件扩展名
- 21. 击参数扩展和文件名
- 22. class.upload.php和文件扩展名丢失
- 23. urlMapping中和文件扩展名
- 24. TSaveDialog文件扩展名和[ofOverwritePromt]问题
- 25. Browserify,Babel和文件扩展名
- 26. 重写WWW和文件扩展名?
- 27. GetTempFileName()和正确的文件扩展名
- 28. 隐藏文件夹和扩展名
- 29. m和mm文件扩展名难题
- 30. wget和奇怪的文件扩展名
通过类扩展,你的意思是'@ class'? – popctrl
@AnonyLawrence,不,这是一个前向声明。 – vikingosegundo