2

我是一个objective-c初学者,我看到了如下代码:

演示控制器.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有什么区别。谁能告诉我?

真诚的,黄

4

1 回答 1

3

在较旧的 Objective-C 版本中,您需要先声明一个方法,然后才能使用它,这就是代码的前三行对method1. 如果您的.h文件既没有声明也没有声明method1method2则不能从文件外部轻松调用.m

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

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

于 2013-08-06T07:44:01.280 回答