我启动了一个新的iOS 5项目,并注意到每个项目的顶部都有一些新的东西.m文件

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
@synthesize ...
  • 这个额外的@interface...如果我有单独的.h文件?
  • 为什么这没有出现在iOS 5之前的项目中?
  • 我能用这个代替单独的吗.h文件?
  • future 的最佳实践是什么?

推荐答案

那是class extension.你可以用它来声明你不想出现在.h文件中.

甚至在之前,许多开发人员就已经使用过这个方法,他们在.m文件中手动添加了扩展名.所以我猜苹果在模板中包含了这一点,因为它被广泛使用,被认为是一种良好的做法.

事实上,.h文件只应用于声明将从其他文件中使用的内容.您可能需要声明一些只在.m文件中使用的属性、方法或常量.对于这些声明,最好在类扩展中进行声明.

所以要回答你的问题:

  • 这个额外的@interface...如果我有单独的.h文件?

不需要,但这是一种最佳实践.

  • 为什么这没有出现在iOS 5之前的项目中?

即使这是一种常用的做法,也没有包含在模板中.

  • 我能用这个代替单独的吗.h文件?

不可以.类扩展名不会替换.h文件,在该文件中,您必须声明类的"public"接口.

  • future 的最佳实践是什么?

您应该将所有不需要在.m文件之外可见的声明放入类扩展名中.

Objective-c相关问答推荐

Objective c 判断文本字段是否为空

如何从 C 方法调用 Objective-C 方法?

如何使用 UIStepper

如何检测 iPhone 5c 的 colored颜色 ?

在 NSData 和 base64 字符串之间转换

UITableView - Select 了哪一行?

Objective C const NSString * vs NSString * const

如何更改 UICollectionView 中的滚动方向?

iOS 内存分配 - 一个应用程序可以使用多少内存?

xcode storyboard Container View - 如何访问视图控制器

当用户返回视图控制器时如何取消 Select uitableview 单元格

StoryBoard 助理编辑器停止显示相关文件

从 UITabBarController 在当前上下文中呈现模态视图控制器后出现黑屏

如何在 Cocoa 中获取 NSArray 的第一个 x 元素?

Xcode 7 UI 测试:如何在代码中消除一系列系统alert

在我滚动之前,数据不会加载到 UITableView 中

检测 UITableView 滚动

Objective-C中的继承和类别有什么区别

Xcode 警告未使用属性访问结果 - getter 不应用于副作用

如何在 Objective-c 中将数组声明为常量?