我是否需要在同一个类中首次使用该方法之前声明一个方法?

时间:2014-06-27 06:53:30

标签: ios objective-c xcode function declaration

我是Objective C的新手,到目前为止一直在使用C / C ++。

在C / C ++中,如果函数不知道函数的原型,它就不会调用该函数,即使它在同一个文件中。所以我们要么使用头文件,要么在使用之前编写原型。像,

void proto(void);

void somefun()
{
   proto(); //call the function 
}

但是在Objective C中,我在同一个文件中有功能,但是我可以在不给它原型的情况下调用它。以下是正确编译的代码。

//calling before actually declaring/defining, but works fine.
[self processResponse:responseObject]; 

-(void)processResponse:(id)responseObject
{

}

Objective C可以调用函数而不知道原型是否在同一个类中?我应该更喜欢什么?

请注意processResponse是内部功能。我不希望它将它暴露给任何其他类。

3 个答案:

答案 0 :(得分:1)

Objective C可以在不知道原型的情况下调用函数吗?

是的,它会试着打电话。

我更喜欢什么?

最好在实现文件(.m)的私有扩展部分中声明该函数,因为您不希望将该函数公开给其他类。

<强> Advandtages:

1.其他Peer只能将该方法理解为内部

2.除了那个班级,没有人可以访问它。

在实施文件(.m)

@interface MyClass ()

-(void)processResponse:(id)responseObject;

@end

@implementation MyClass

@end

答案 1 :(得分:1)

您正在将功能与方法进行比较。函数仍然具有与C中相同的规则。对于目标C方法,没有原型。您可以在标头或类扩展中声明方法,但这些方法将它们公开。至于受保护的方法,你不需要任何东西,只需创建方法并从类中的任何地方调用它。

过去你必须将这些privet方法放在类的顶层才能使用它们(方法B只有在方法A上面写入方法A时才能调用方法A)但是很久以前。 / p>

答案 2 :(得分:0)

就像在Objective-C中的C一样,你必须在使用之前声明一个函数。您在示例中所做的不是在声明函数之前调用函数,而是在对象中发送消息(或者如果我们想要使用更多OOP术语,则调用方法)。这是另一回事。 无论如何,对于Xcode中包含的LLVM编译器的所有版本,从版本4.3开始,方法声明的顺序不再重要,因为如果编译器遇到尚未声明的方法,它将在@implementation块的其余部分中查找看看以后是否已经宣布。