Objective c - 静态成员和常量

mk1*_*k12 5 java constants objective-c static-members

是什么区别:

@interface SomeClass : NSObject {
    NSObject *something;
}
Run Code Online (Sandbox Code Playgroud)

@interface SomeClass : NSObject {

}
NSObject *something;
Run Code Online (Sandbox Code Playgroud)

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

out*_*tis 7

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

typedef struct {
    NSObject *something;
} SomeClass;
Run Code Online (Sandbox Code Playgroud)

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

NSObject *something;
Run Code Online (Sandbox Code Playgroud)

在全球范围内定义.Objective-C实际上没有类变量,因此使用全局变量(有时使用;有编译单元范围和静态存储类的变量应该使用).

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

正确销毁类变量可能很棘手.将回收内存,并在应用程序退出时自动关闭打开的文件,但其他资源可能无法很好地处理.