【问题标题】:Objective c - static members and constantsObjective c - 静态成员和常量
【发布时间】:2009-09-05 16:49:45
【问题描述】:

两者有什么区别:

@interface SomeClass : NSObject {
    NSObject *something;
}

@interface SomeClass : NSObject {

}
NSObject *something;

?另外,Java 的 final 和 Objective C (C) 的 const 有什么区别?对于以下情况,我应该在哪里声明静态类成员:1.只有类需要它时**2.**它在哪里是其他类可以读取的属性?我已经知道#define,但这对对象不利,因为它每次都会创建新对象。谢谢!

【问题讨论】:

    标签: java objective-c constants static-members


    【解决方案1】:

    前者是一个实例变量,为 SomeClass 的每个实例创建一个something。类似于C的

    typedef struct {
        NSObject *something;
    } SomeClass;
    

    后者声明了一个与 SomeClass 没有真正关联的全局变量。在 C 中,它相当于

    NSObject *something;
    

    在全局范围内定义。 Objective-C 没有真正的类变量,所以使用全局变量(而是有时使用;应该使用具有compilation unit 范围和静态storage class 的变量)。

    定义“类”变量最简洁的方法是在实现文件中定义一个静态变量。这样,只有类方法可以访问它,并且避免污染全局命名空间。如果您希望它公开可用,请定义访问器。

    正确销毁类变量可能很棘手。应用退出时内存会被回收,打开的文件会自动关闭,但其他资源可能处理得不太好。

    【讨论】:

      【解决方案2】:

      关于“final vs const”的问题,两者都是相似的。他们声明该值不能改变。请注意,在 Java 中,由于所有值(除了原语)都是指针,它指向的对象可以在下面改变,但内存位置(指针)永远不会改变。我相信您会期望在 Objective C 中有类似的行为,并且不允许可变元素为“final”或“c​​onst”总是一个好主意,因为对象内部的值仍然可以修改。

      【讨论】:

      • 请注意,“final”类似于 const 指针(“<type> * const”),而不是指向 const 的指针(“<type> const *”)。它也与 C++ 的引用类型(“<type>&”)非常相似。
      • 感谢您的澄清 - 我总是混淆特殊情况:)
      • 如果您认为这令人困惑,请查看:strainu.ro/programming/c/a-little-fun-with-cdecl
      猜你喜欢
      • 2012-07-05
      • 2012-07-14
      • 1970-01-01
      • 2012-03-22
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多