objective-c - 类别对内存使用有什么影响?

标签 objective-c ios categories

将方法作为类别添加到 Objective-C 类是否会影响该类的内存使用?

最佳答案

类别对类(class)的影响

Objective-C 运行时最终通过为您的实例生成一个包含类别的类层次结构来支持您的类别方法。实现类别的类的实例不会比附加的子类更昂贵或更需要内存。类别方法在运行时应用,但是一旦该方法被添加到类中,它就与定义在该类上的方法没有区别。这些对象之间的消息发送机制都是相同的。

类别更多地是关于代码设计和关注点分离。您可以简单地将它们与已建立的 Cocoa 模式一起用作帮助您设计类的工具,而不是从内存优化的角度考虑。

类别对运行时环境的整体影响

@NSResponder 让我想起了一个更重要的观点。因为类别是在运行时加载的,所以在使用它们之前不会加载它们。一个非常大的类或类集群可能在单独的类别中包含更高级别框架的代码。如果您完全避免更高级别的框架,您将永远不必加载它添加的类别。例如,一个类可能在 Foundation 层中运行良好,然后在从 Cocoa 层使用时加载额外的功能。因此,这可以被认为是节省空间,从总体上看这是一个很好的答案。

不过,如果您只是编写一些类,这不应该是您自己优化内存的主要方法。除非您正在编写大量跨越多个层的代码,否则您通常会声明类别以便自己使用它们或使它们可供其他对象使用。 Objective-C 和 Cocoa 框架有很好的延迟加载代码包的机制,可以很好地满足这个目的。

关于objective-c - 类别对内存使用有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6894111/

相关文章:

objective-c - NSTask 终止处理程序仅在我发送 waitUntilExit 时运行

ios - ObjC-以编程方式将标签添加到UIScrollView

iphone - 在 iPad 上选择图像

php - 选择子类别和没有子类别的父类别

objective-c - 如何将自定义对象的 NSArray 存档到 Objective-C 中的文件

ios - 如何检查彼此顶部显示的多个 UIView subview 是否有贝塞尔曲线路径内的触摸事件?

ios - 如何计算真实世界的对象大小?

ios - 如何在动态 TableView 中有一个静态单元格?

MediaWiki - 如何使用图库中某个类别的所有图像

wordpress - Woocommerce 自定义产品类别下拉问题