当你需要在Java中初始化静态变量时,你可以这样做:
public class MyClass {
private static Object someStaticObject;
static {
// initialize someStaticObject here
}
...
如何在 Cocoa 中做同样的事情?
具体来说,这就是我所追求的:我有一个包含大量用户首选项的应用程序。我想从一个类中管理所有这些首选项,其中所有方法都是静态的,如下所示:
@implementation Preferences
+(void)setMotion:(BOOL)isMotion {
[[NSUserDefaults standardUserDefaults] setBool:isMotion forKey:keyIsMotion];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+(BOOL)isMotion {
[[NSUserDefaults standardUserDefaults] boolForKey:keyIsMotion];
}
这样我就可以在代码中的任何位置轻松访问和设置我的首选项:
[Preferences setMotion:TRUE];
或
if ([Preferences isMotion]) {
...
鉴于我计划有数十个静态方法,它希望有一个静态变量默认值定义如下:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
这样我上面的代码就可以变成:
+(void)setMotion:(BOOL)isMotion {
[defaults setBool:isMotion forKey:keyIsMotion];
[defaults synchronize];
}
+(BOOL)isMotion {
[defaults boolForKey:keyIsMotion];
}
但是,我不知道如何实现这一点。
最佳答案
您可以重写 Objective-C 对象上的 + (void)initialize
方法。
来自 Apple 文档 NSObject :
运行时在程序中的每个类或任何继承该类的类从程序内发送其第一条消息之前,向该类或任何继承该类的类发送初始化一次。 (因此,如果不使用该类,则该方法可能永远不会被调用。)运行时以线程安全的方式将初始化消息发送到类。父类(super class)在其子类之前收到此消息。
您可以使用该方法初始化静态 ivars 和/或 NSUserDefaults
关于cocoa - 如何在 Cocoa 中进行静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844833/