5

有什么区别:

@interface SomeClass : NSObject {
    NSObject *something;
}

@interface SomeClass : NSObject {

}
NSObject *something;

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

4

2 回答 2

7

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

typedef struct {
    NSObject *something;
} SomeClass;

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

NSObject *something;

在全局范围内定义。Objective-C 并没有真正的类变量,所以使用全局变量(而是有时使用;应该使用具有编译单元范围和静态存储类的变量)。

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

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

于 2009-09-05T17:42:09.933 回答
2

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

于 2009-09-05T17:05:10.293 回答