将一个方法作为一个类添加到Objective-C类是否对该类的内存使用有影响?
答案 0 :(得分:6)
类别对课程的影响
Objective-C运行时最终通过为包含类别的实例生成类层次结构来表达您的类别方法。实现类别的类的实例不会比额外的子类更昂贵或要求内存。类别方法在运行时应用,但是一旦将方法添加到类中,它将与该类上定义的方法没有区别。这些对象之间发送消息的机制都是一样的。
类别更多地是关于代码设计和关注点分离。您可以简单地将它们与已建立的Cocoa模式一起使用,作为帮助您设计类的工具,而不是考虑内存优化。
类别对运行时环境的总体影响
@NSResponder让我想起了另一个好点。由于类别是在运行时加载的,因此在使用它们之前不会加载它们。一个非常大的类或类集群可能包含单独类别中更高级别框架的代码。如果完全避免使用更高级别的框架,则永远不必加载它添加的类别。例如,类可以在Foundation层中正常工作,然后在从Cocoa层使用时加载额外的功能。所以这可以被认为是节省空间,这对于整个画面来说是一个很好的答案。
但是,如果您只是编写一些类,这不应该是您自己优化内存的主要方法。除非您正在编写跨越多个层的大量代码,否则通常会声明类别以便自己使用它们或使其可供其他对象使用。 Objective-C和Cocoa框架具有良好的机制,用于懒惰地加载代码包,这很好地服务于此目的。
答案 1 :(得分:4)
内存占用类别的好处是应用程序在您使用之前不会加载类别。 NeXTSTEP时代的典型例子是将视图的打印代码放在一个类别中。