【问题标题】:What is the purpose of a class extension without any content?没有任何内容的类扩展的目的是什么?
【发布时间】:2026-02-04 22:40:02
【问题描述】:

根据开发者文档,类扩展是通过在实现文件中声明@interface来实现的,也可以用来将实例变量重新声明为私有。但是,我经常看到下面的代码没有声明新方法或实例变量。它的目的是什么?

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController 
...  

【问题讨论】:

  • 类扩展不用于重新将实例变量声明为私有。您可以使用类扩展来声明私有实例变量。这意味着实例变量永远不应该放在 .h 文件中。当然,在 @implementaiton 块中声明实例变量是最简单(也是最好)的。

标签: objective-c class-extensions


【解决方案1】:

这样的代码没有任何目的。它存在的唯一原因是它是在 Xcode 中创建 .m 文件的标准模板的一部分。

话虽如此,这样的类扩展是完全无害的,因此在需要添加私有方法或变量时保留它们不会损害应用程序的性能。最后,这是个人喜好问题:例如,我从我的代码中删除了这些未使用的模板生成的工件,但我可以接受一个支持保留它们的论点。

如果您不希望默认生成这些类扩展,请为新的 Objective-C 类克隆和修改 Xcode 模板 (here is a Q&A explaining how to do it)。

【讨论】:

  • 我认为最好删除任何不执行任何操作的生成代码(例如 viewDidLoaddidReceiveMemoryWarning,它们只调用 super)。代码一次编写,多次阅读,因此节省您和您的同事阅读不需要的代码的宝贵时间。
  • 我不认为 Q&A 多年来一直是正确的。现在要修改模板实际上是不可能的。
  • @matt 我在 Xcode 6 中使用了几个自定义模板(至少是我自己的类模板),所以它仍然是可能的。
最近更新 更多