繁体   English   中英

Objective c - 静态成员和常量

[英]Objective c - static members and constants

是什么区别:

@interface SomeClass : NSObject {
    NSObject *something;
}

@interface SomeClass : NSObject {

}
NSObject *something;

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

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

typedef struct {
    NSObject *something;
} SomeClass;

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

NSObject *something;

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM