Ios 为什么视图控制器有两个@接口?
我正在学习一些Objective-C,特别是iOS相关的东西。每当我生成新的Ios 为什么视图控制器有两个@接口?,ios,xcode,Ios,Xcode,我正在学习一些Objective-C,特别是iOS相关的东西。每当我生成新的UIViewController或UITableViewController等时,生成的.h和.m文件都包含一个@接口。如果我也从.m文件中删除@接口,应用程序将继续编译。.m文件中此@接口的用途是什么?文件中的@interface是一个类扩展名(一个没有名称的类别)。现在,在模板中,您可以放置任何不想向代码的其他部分公开的内部方法或IVAR声明 随着现代Objective-C运行时的出现和clang的发展,编写良好的类
UIViewController
或UITableViewController
等时,生成的.h
和.m
文件都包含一个@接口
。如果我也从.m
文件中删除@接口
,应用程序将继续编译。.m
文件中此@接口的用途是什么?文件中的@interface是一个类扩展名(一个没有名称的类别)。现在,在模板中,您可以放置任何不想向代码的其他部分公开的内部方法或IVAR声明
随着现代Objective-C运行时的出现和clang的发展,编写良好的类应该:
1) 标题中只有公共方法
2) 在内部类扩展中声明IVAR和内部方法从技术上讲,它是一个“类扩展”(请参阅)。在实践中,将其用作“私有”接口已变得很常见(它仅对其所在的文件“可见”)。Objective-C不会阻止其他任何人调用这些方法,但他们不会“看到”它们(将.h文件视为您的公共接口,将此匿名类别视为您的私有接口)
它便于声明您不想公开的@property
s。它实际上是一个类扩展。区别很重要。类扩展可以将IVAR添加到类中。类别不能。