![](/img/trans.png)
[英]Do final members assigned constants on declaration get optimized at run-time to 'static final's?
[英]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”或“const”总是一个好主意,因为对象内部的值仍然可以修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.