我有一种方法可以让我做一些启动动画。在使用应用程序时,该方法会被多次调用,但在第一次调用时,它还需要做一些特殊的事情。
Singletons是可行的吗?也许还有一种更好的方法,而不是测量这种方法的调用次数,并将其存储在ivar中。
答案 0 :(得分:7)
- (void)someMethod {
static BOOL hasBeenCalledBefore = NO;
if (!hasBeenCalledBefore) {
// perform setup
hasBeenCalledBefore = YES;
}
// do other stuff
}
如果你正在使用线程,可能需要额外的工作,但这是基本的想法。
答案 1 :(得分:2)
为什么构造函数中没有初始化代码?也许您需要将该方法分解为它自己的类,该类使用构造函数来处理您提到的init块。
答案 2 :(得分:2)
对chuck答案的修正(非常正确)
他的作品并回答了你的问题,但你可以使用的另一个选项(假设它不需要访问传递给该方法的任何变量)将从你的方法中取出代码并将其放入静态初始化器。它只会在首次加载类时执行,并将隔离基本上完全不同的代码段。
如果你想为每个新类调用它,请使用Chuck的答案,但使用成员变量,或者使用类初始值设定项。