2013-06-28 36 views
0

类扩展名和头文件究竟是什么?有什么区别?在头文件中声明属性/方法与在类扩展中声明有什么区别。我对Objective-C是全新的,所以初学者的术语将是有益的:)类扩展名和头文件

在此先感谢!

+0

通过类扩展,你的意思是'@ class'? – popctrl

+0

@AnonyLawrence,不,这是一个前向声明。 – vikingosegundo

回答

2

顾名思义,它们扩展了这个类。类延续是另一个名字。类扩展通常用于声明私有方法和属性。您希望类扩展名对@implementation可见,并且不在头文件中(即,您希望类扩展名和@implementation位于MONClass.m中)。

头文件中的类型和方法一般都是公开的 - 任何客户端都可以使用。

实例:类扩展声明的财产将不可见/给谁#import头客户端访问,但它会是由@implementation可用,因为@implementation可以看到类扩展的声明。

所以这可以用来模拟你的ivars和方法的受限访问。这很有用,因为ObjC方法和属性不能指定为private/protected/public(例如使用@public)。

类扩展与类别不同主要是因为扩展可能会声明存储(例如,将生成后备ivars的属性)。

+0

谢谢你,这是解释它最有用的方法!特别是因为我用Java编程:) – golddove

2

A 标头文件(.h)是您在现有类中公开声明属性,方法和协议的地方。然后你可以导入这个文件,当然可以用它来实现。

扩展是另一个@interface在您的执行(.m)文件。这扩展了导入头的内部实现,添加了一些方法,如果有人或其他人导入与该类相关联的头文件,这些方法将不可用。

有关详细信息,请参阅Apple's documentation on customizing existing classes

1

问: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