Ios 为什么视图控制器有两个@接口?

Ios 为什么视图控制器有两个@接口?,ios,xcode,Ios,Xcode,我正在学习一些Objective-C,特别是iOS相关的东西。每当我生成新的UIViewController或UITableViewController等时,生成的.h和.m文件都包含一个@接口。如果我也从.m文件中删除@接口,应用程序将继续编译。.m文件中此@接口的用途是什么?文件中的@interface是一个类扩展名(一个没有名称的类别)。现在,在模板中,您可以放置任何不想向代码的其他部分公开的内部方法或IVAR声明 随着现代Objective-C运行时的出现和clang的发展,编写良好的类

我正在学习一些Objective-C,特别是iOS相关的东西。每当我生成新的
UIViewController
UITableViewController
等时,生成的
.h
.m
文件都包含一个
@接口
。如果我也从
.m
文件中删除
@接口
,应用程序将继续编译。
.m
文件中此
@接口的用途是什么?

文件中的@interface是一个类扩展名(一个没有名称的类别)。现在,在模板中,您可以放置任何不想向代码的其他部分公开的内部方法或IVAR声明

随着现代Objective-C运行时的出现和clang的发展,编写良好的类应该:

1) 标题中只有公共方法

2) 在内部类扩展中声明IVAR和内部方法从技术上讲,它是一个“类扩展”(请参阅)。在实践中,将其用作“私有”接口已变得很常见(它仅对其所在的文件“可见”)。Objective-C不会阻止其他任何人调用这些方法,但他们不会“看到”它们(将.h文件视为您的公共接口,将此匿名类别视为您的私有接口)


它便于声明您不想公开的
@property
s。

它实际上是一个类扩展。区别很重要。类扩展可以将IVAR添加到类中。类别不能。