我有一个iOS应用程序。应用程序有2种不同的视图:Main和Settings。实际上,应用程序需要在主视图中使用之前加载和初始化一些库和框架。
当我在viewDidLoad
方法中进行初始化时,它可以正常工作。但是当转到“设置”并返回“主视图”时,初始化将再次启动,这不是我想要的,并且应用程序会导致内存问题。
我需要一个在应用程序启动时调用一次的方法。有什么想法吗?
编辑:我切换到标签视图。它加载一次视图。这是另一种解决方案。
答案 0 :(得分:28)
您在其中一条评论中说明您不希望将此代码放在application:didFinishLaunching
中,并且您希望将其保留在viewDidLoad中。您可以使用此代码段仅在第一次调用时运行代码:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// code here
});
内部块只会执行一次。如果再次加载视图,则不会调用该块。请注意,有一个Xcode代码段,您可以通过开始在编辑器中键入dispatch_once
来访问它:
答案 1 :(得分:7)
使用这个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
它应该在您的appdelegate类中。
希望有所帮助
答案 2 :(得分:2)
您也可以使用
+ [NSObject initialize]
定义该名称的类方法,在将任何其他消息发送到该类之前,它将运行一次:
+ (void)initialize {
// Put one-time initialization code here.
}
答案 3 :(得分:0)
在AppDelegate
中,其中一个对象保证在整个应用程序中只有一个实例(单例),您可以声明一个实例变量/属性:
BOOL initialized;
然后在viewDidLoad
的{{1}}中,检查代码是否已初始化;如果没有,则运行代码并将变量设置为true:
UIViewController