Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 要调用一次的iOS函数(应用程序初始化时)_Objective C_Ios_Viewdidload - Fatal编程技术网

Objective c 要调用一次的iOS函数(应用程序初始化时)

Objective c 要调用一次的iOS函数(应用程序初始化时),objective-c,ios,viewdidload,Objective C,Ios,Viewdidload,我有一个iOS应用程序。应用程序有两个不同的视图:主视图和设置。事实上,在主视图中使用应用程序之前,它需要加载并初始化一些库和框架 当我将这个初始化放在viewDidLoad方法中时,它工作正常。但当转到设置并返回主视图时,初始化会再次启动,这不是我想要的,应用程序会导致内存问题 我需要一个在应用程序启动时调用一次的方法。有什么想法吗 编辑:我切换到选项卡式视图。它只加载一次视图。这是另一个解决方案。使用此解决方案: - (BOOL)application:(UIApplication *)ap

我有一个iOS应用程序。应用程序有两个不同的视图:主视图和设置。事实上,在主视图中使用应用程序之前,它需要加载并初始化一些库和框架

当我将这个初始化放在
viewDidLoad
方法中时,它工作正常。但当转到设置并返回主视图时,初始化会再次启动,这不是我想要的,应用程序会导致内存问题

我需要一个在应用程序启动时调用一次的方法。有什么想法吗

编辑:我切换到选项卡式视图。它只加载一次视图。这是另一个解决方案。

使用此解决方案:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
它应该在appdelegate类中


希望它对您有所帮助

您在其中一条评论中声明不希望将此代码放入
应用程序:didfishLaunching
中,并且希望将其保留在viewDidLoad中。您可以使用此代码段仅在第一次调用时运行代码:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // code here
});
内部块将只执行一次。如果再次加载视图,则不会调用块。请注意,这里有一个Xcode代码段,您可以通过在编辑器中开始键入
dispatch\u once
来访问该代码段:


在您的
AppDelegate
中,您可以声明一个实例变量/属性,该对象保证在整个应用程序中只有一个实例(单例):
BOOL初始化

然后在
UIViewController
viewdiload
中,检查代码是否已初始化;如果不是,则运行代码并将变量设置为true:

 if (!initialized) {
    // Code goes here
    initialized = true;
 }
你也可以使用

+ [NSObject initialize]
定义该名称的类方法,在将任何其他消息发送到该类之前,该方法将运行一次:

+ (void)initialize {
  // Put one-time initialization code here.
}

但是为了快速启动应用程序,您必须避免在
didfishlaunchingwithoptions
中运行大线程,我同意@collinger。我需要一个方法来调用Internal ViewController。你的意思是你的应用程序只需在初始启动时正确初始化即可。如果您在
viewDidLoad
中执行此操作,显然每次加载时都会调用它,这里您所需要的只是记住是否已打开它。为此,您可以在
appDelegate
中维护plist或NSUserDefault键值对,甚至是一个全局变量,以记住状态……在@Novarg谈论的地方设置一个标记,并在视图控制器的viewDidXXXX中重置它,之前检查该标记。非常棒的Ansare@Mike Weller