Objective-c -method仅在实现和扩展类的方法中,有什么区别

时间:2013-08-06 07:31:56

标签: objective-c

我是一名Objective-c初学者,我看到如下代码:

DemoController.m:

@interface DemoController()
-(void)method1;
@end

@implementation DemoController

-(void)method1
{
    NSLog(@"This is method1 in class extension");
}

//this method is not declared in DemoController.h, only in DemoController.m.
-(void)method2
{
    NSLog(@"This is method2 in implementation only");
}

@end

我想知道method1和method2之间的区别。 有人可以告诉我吗?

此致 黄

1 个答案:

答案 0 :(得分:2)

在旧的Objective-C版本中,您需要在使用之前声明一个方法,这就是代码的前三行用method1执行的操作。如果您的.h文件未声明method1method2,则无法从.m文件外部轻松调用。

在Objective-C中,所有方法都是公开的!无法隐藏方法。您始终可以使用“低级”方式调用任何方法,例如performSelector:withObject:。但是,如果您声明一个方法,编译器会为您提供以前习惯的简单访问:[object method]

因此,您的示例中method1method2之间没有区别。在类扩展中声明方法,以便您可以在同一个文件中使用它们