我正在编写一个类文件,我将CGPoint
作为Ivar包含在内。这让我想知道与较小的objective-c数据结构相关的开销。类似于CGPoint
的内存占用是否足以证明指向它的指针,或者我只是指向2 CGfloat
值的指针?就此而言,如果我需要的只是x / y坐标,为什么不只是像ivars一样坚持2个整体?
在相关的说明中,是否存在描述微小数据结构的术语,如“小数据结构”或“琐碎的数据结构”;一个描述由少数基元组成的结构的词。
答案 0 :(得分:2)
小对象肯定存在问题,但系统中已经有几个小对象优化。
通常,如果需要对象,请使用对象。如果没有,那就不要。
然而,更大的问题是编写代码,以便人类易于阅读,并且易于人工维护。使用性能工具(如Instruments)来隔离需要解决系统资源利用率的地方,然后 解决这些问题。
当然,有明显的愚蠢的要避免的事情,但总的来说,专注于干净的设计,并且易于阅读/更改实现。在测试套件上运行性能工具应该很容易发现任何错误。
答案 1 :(得分:0)
在遇到性能问题之前,首先不要担心开销。
大多数(但不是全部)面向对象语言在小型,非对象类型和较大的基于对象的类型之间形成鲜明对比;但边界是模糊的。决定如何表示类型的一个有用的区别是,您是否将其视为一个简单的值,您可能认为在上运行或使用;或更多涉及的东西,可能是具有固有的行为,在等上运作的东西。
内置的基元类型主要是值:整数,字符等。在那个静脉中,复数,分数,坐标等是简单的值 - 使用结构;树,堆栈,层次结构不是 - 使用对象。
在您的相关说明中,考虑许多人使用“价值”,您也可以考虑"composite"。 “小资”不是一个好的选择,错误的内涵;-)其他人可能会说“基本”,“琐碎”,“结构”或“记录” - 而后两者也可以用来指代他们经常使用的非常大的类型用于小的。