Dan*_*ark 11 iphone objective-c
我意识到过早优化具有主观成分,但这是一个经验或最佳实践问题.
在为iOS编程时,我是否更喜欢使用struct和typedef,其中对象没有"行为"(方法,基本上)?我的感觉是struct对于非C人来说语法有点奇怪,但它应该是低调的.然后,用50K NSObject实例测试一些案例,它似乎并不坏(相对,我知道).NSObject除非我遇到性能问题,否则我应该"习惯它"(尽可能使用结构)或实例正常吗?
典型的情况是具有两个int成员变量的类.我已经读过使用结构来保存两个NSString实例(或任何子NSObject类)是一个坏主意.
Yuj*_*uji 14
Struct带有NSObject实例的s 绝对是个坏主意.您需要-init并-dealloc正确处理保留计数.写作retain和releases来自呼叫者方面只是疯了.它永远不会得到回报.
Struct有两个int或四个doubles的是边缘情况.在Cocoa框架自身实现NSRect,NSPoint等等.作为一个结构.但是这个事实让很多新人感到困惑.老实说,即使原始类型和对象类型之间的区别也会使它们混淆.当你将structs作为对象的属性时,它甚至会让我感到困惑:你做不到
object.frame.origin.x=10;
Run Code Online (Sandbox Code Playgroud)
如果你开始制作自己struct的,你需要记住哪个是哪个.这又是一个麻烦.我认为他们(NSRect等)的原因struct基本上都是历史性的.
我宁愿做一切对象.如果可用的话,使用垃圾收集.
并且,不要问人们是否值得优化.用仪器或其他方法自己测量.根据环境(ppc vs intel,OS X vs iOS,iPad vs iPhone),在新系统中,在先前系统中速度更快的一种方式可能会更慢.
Tom*_*sen 11
Objective C对象具有与结构几乎相同的存储空间,除了它是4个字节(64位上的8个字节)更大.就是这样 - 只有一个指向运行时保存所有类信息的地方的指针.
如果你的内存紧张,那么就会失去4个字节,但通常只有大量的对象:50,000 Nsobjects vs structs只有200k - 你可以获得200k的很多东西.对于一百万个对象,成本将增加到iPhone上.
如果你想说项目转移到openGL或需要交流数组用于其他目的,那么另一个选择是使ONE NSObject具有指向所有50,000个整数的malloc指针.然后目标c内存开销是〜0,你可以将所有讨厌的malloc和free()东西封装到一个.m文件的内部.
我认为使用结构来保存少量原始(即非对象)类型而没有任何行为需要时,我没有任何问题.在Cocoa框架中已经有几个这样的例子(例如CGRect,CGSize,CGPoint,NSRange).
不要使用结构来保存Objective-C对象.它使参考计数环境中的内存管理变得复杂,并且可能在GC环境中完全破坏它.
| 归档时间: |
|
| 查看次数: |
10691 次 |
| 最近记录: |