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