我是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
是内部功能。我不希望它将它暴露给任何其他类。
答案 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块的其余部分中查找看看以后是否已经宣布。