代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

在Objective-C中使用Structs(对于iOS):过早优化?

  •  11
  • Dan Rosenstark  · 技术社区  · 14 年前

    struct 而typedef中的对象没有“行为”(基本上是方法)吗?我的感觉是 结构 对于非C语言的人来说,语法有点奇怪,但应该低调一些。再次,用50K测试一些案例 NSObject 例如,它看起来并不坏(相对的,我知道)。我应该“习惯它”(尽可能使用structs)还是

    典型的例子是一个有两个 int 成员变量。我读过用一个结构来容纳两个 NSString

    6 回复  |  直到 14 年前
        1
  •  10
  •   zoul    14 年前

    使用常规对象,直到遇到可测量的性能瓶颈。我使用了高级代码,即使在紧凑的游戏循环中也没有问题消息传递,收集类,自动释放池,没有问题。

        2
  •  14
  •   Dan Rosenstark    12 年前

    Struct NSObject 他们的例子绝对是个坏主意。你需要 -init -dealloc 正确处理保留计数。写作 retain releases 打电话的那一方简直是疯了。它永远不会有回报。

    两个人在一起 int 或者四个 double 这些都是边缘病例。Cocoa框架本身实现了 NSRect NSPoint 作为一个结构。但这一事实让很多新来者感到困惑。老实说,即使是基本类型和对象类型之间的区别也会让他们感到困惑。当你有 struct 作为对象的属性:你不能这样做

    object.frame.origin.x=10;
    

    如果你开始做你自己的 结构 NSRect公司 结构

    我更喜欢把所有东西都做成实物。如果有的话,使用垃圾收集。

    而且,不要问别人某样东西是否值得优化。你自己用仪器或别的什么来测量。根据不同的环境(ppc与intel、osx与iOS、iPad与iPhone),在以前的系统中速度更快的一种方式在新系统中可能会更慢。

        3
  •  11
  •   Tom Andersen    14 年前

    一个Objective C对象的存储空间几乎与结构体相同,只是它比结构体大4字节(64位上为8字节)。就这样-只需将一个指针指向运行时保存所有类信息的位置。

    如果你的内存太紧,那么就丢失4个字节,但通常这只适用于大量的对象:50000个Nsobjects vs structs只有20万个—你可以用这20万个对象得到很多东西。对于100万个对象,iPhone的成本会加起来。

        4
  •  5
  •   JeremyP    14 年前

    我认为在不需要行为的情况下,使用结构来保存少量的基元(即非对象)类型完全没有问题。可可框架中已经有几个这样的例子( CGRect, CGSize, CGPoint , NSRange 例如)。

    不要使用结构来保存Objective-C对象。它使引用计数环境中的内存管理复杂化,并可能在GC环境中完全中断。

        5
  •  3
  •   Dan Rosenstark    14 年前

    对我来说,我更喜欢使用常规对象,因为你可以很容易地用它做对象工作,比如保留、释放、自动释放。我在Cocoa框架中只看到很少的结构,比如CGSize、CGRect和CGPoint。我认为原因是它们被大量使用

        6
  •  1
  •   nacho4d    14 年前

    我认为,如果你正在处理基于C的框架,那么特别使用structs是一个好主意,比如OpenGL、CoreGraphics、CoreText,特别是那些需要两个/三个int、double、chars等的东西(如果它们还没有在一些Apple框架中实现:CGRect、CGPoint、CTRect、NSRange,等…)C的东西发挥和其他C的东西看起来更好。

    我不认为我会编写一个包含几个int的NSObject子类。这简直太可笑了。大声笑。