繁体   English   中英

目标C中的方法顺序

[英]order of methods in objective C

我在Objective-C(主要在实现文件中)中排序方法的方式是否重要?

@implementation UDDPlayerDetailsViewController

- (IBAction)cancel:(id)sender
{
    [self.delegate playerDetailsViewControllerDidCancel:self];
}

-(IBAction)done:(id)sender
{
    [self.delegate playerDetailsViewControllerDidSave:self];
}

因此,在这种情况下,我首先放置哪个(取消或完成)显然不重要,但我想知道这是否适用于所有方法? 编译器是否只是读完所有内容然后采取措施,还是在某些情况下将一个文件放在另一个文件的前面会产生不同的结果?

方法的顺序无关紧要,无论在@implementation还是在@interface部分中。

  • @interface部分中没有关系,因为那里的方法之间没有依赖关系,
  • @implementation部分中没关系,因为@interface部分(可能与类扩展@interface结合使用)列出了编译器的所有方法,提供了它们的签名并消除了潜在的歧义。
  • 最后,编译器允许您在实现部分本身中完全定义“私有”方法。 编译器足够聪明,可以期待这些添加的方法。

它曾经很重要,但现在不再重要了。 那是因为编译器,而不是语言。

过去,您必须在使用方法之前声明一个方法。 因此,如果您有

-(void) methodA;
{
  [self methodB];
}

-(void) methodB;
{
  //Do stuff
}

您将收到一条警告, methodB未定义methodB

如果在您的@interface中声明了methodB

较新版本的Clang编译器能够处理前向引用。 我不记得确切的Xcode版本包含此更改。 Xcode 4.6,也许吗?

我不知道在Objective-C中有什么重要的情况。 在常规C中,您需要在使用方法之前声明方法,因此

void usesUndeclared() {

    undeclaredFunction();
}

void undeclaredFunction() {}

将是一个错误,但是

void undeclaredFunction;
void usesUndeclared() {

    undeclaredFunction();
}

void undeclaredFunction() {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM