1

像大多数人一样,我最近下载了最新版本的 XCode (4.3.1)。我注意到,当我创建新UIViewController对象时,相关.m文件包含我以前从未见过的其他类定义代码。

具体来说,如果我创建一个UIViewController名为“TestViewController”的新文件,则会得到以下.m文件输出。

\\... removed comments...
#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

\ETC...

自 XCode 4.3 以来新添加的代码是#import语句下的部分:

@interface TestViewController ()

@end

这段代码的目的是什么?括号内可以/应该有任何内容吗?任何代码都应该放在@interfaceand@end语句中吗?

简而言之,将这段代码添加到模板有什么意义?作为一个有趣的旁注,当我尝试NSObject从模板创建一个时,没有添加上面提到的代码片段。它可能会出现在其他类型的类模板中,但目前我只遇到过UIViewControllerUITableViewController对象。

4

3 回答 3

9

那是一个Objective-C 类扩展。它用于定义“私有”变量、属性和方法。

这个想法是 .h 文件应该只包含可公开访问的属性和方法。很多时候,在编写视图控制器时,您会想要/需要编写一些方法,但这些方法不应公开可见(即,这些方法应仅在您的 .m 文件中使用)。您在类扩展中声明这些方法以使其不受公共 .h 接口的影响。

于 2012-03-21T18:19:21.407 回答
2

这是一个类扩展,这里有一篇很好的文章介绍它们的使用

于 2012-03-21T18:21:19.530 回答
1

这只是class extension从实现文件中的头文件中“隐藏”属性/方法声明,有关更多信息,请参阅参考资料。您不必使用它,但您会发现它自动创建非常方便。

于 2012-03-21T18:22:26.027 回答