2012-05-18 26 views
2

在ox xCode(4.3)的最后一个版本中,我看到了在.m文件中进行接口声明的预定义模板(例如Master/Detail模板)。例如,文件中MyFile.h有:在实现文件中声明接口(Objective-C)

@interface MyFile 

@property (nonatomic, retain) NSString *someProp; 

@end 

而在MyFile.m文件有:

@implementation MyFile 

@interface MyFile { 
    NSString * anotherProp; 
} 

- (id) init... 

为什么对这样做?为什么anotherProp未被声明为MyFile.h文件?

在此先感谢

+1

这不是它看起来像,因为这是无效的代码。这可能是这样的:'@interface MyFile(){NSString * anotherPropt} @end @implementation MyFile - (id)init {...',在这种情况下请参阅:http://stackoverflow.com/questions/9751057/what- m-files-used-for-in-ios-5- –

+0

你是对的,我从内存中发布它,我忘记了括号 – rai212

回答

5

那么它没有宣布这种方式,但这种方式: -

@interface ClassName() { 

    Declarations; 

} 

Methods; 

@end 

这些被称为类extension.They类似的类别,但可以实施只有类的声明不在任何其他类中。扩展的使用是重新声明属性是public或readwrite,如果需要也声明新属性。它们只允许您在@interface以外的位置声明属性和变量,以便名称为extensios。

由于它们使得方法公开并且类的数据隐藏能力被补偿,但是类扩展有效地扩展了类的主接口,所声明的方法具有与在声明中声明的方法相同的要求,所以可以解决类别的问题。班级的公共主要界面。

+0

你说得对,我忘了插入语。感谢您的解释,我现在了解它 – rai212

+1

类别也可以使非公共方法(只要ObjC中的任何方法“非公共”),只要它们的声明是隐藏的。不同之处在于扩展中声明的方法必须在类的主@implementation块中定义,并且该扩展可以(如前几个编译器版本)声明ivars。 –

+0

@roronoa如何访问其他类实现中的接口类方法?我尝试在其他视图类中声明该接口类名称,该类名称未填充.... – SnakingPrabhu