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

时间:2012-04-04 06:38:33

标签: objective-c ios viewdidload

我有一个iOS应用程序。应用程序有2种不同的视图:Main和Settings。实际上,应用程序需要在主视图中使用之前加载和初始化一些库和框架。

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

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

编辑:我切换到标签视图。它加载一次视图。这是另一种解决方案。

4 个答案:

答案 0 :(得分:28)

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

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    // code here
});

内部块只会执行一次。如果再次加载视图,则不会调用该块。请注意,有一个Xcode代码段,您可以通过开始在编辑器中键入dispatch_once来访问它:

enter image description here

enter image description here

答案 1 :(得分:7)

使用这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

它应该在您的appdelegate类中。

希望有所帮助

答案 2 :(得分:2)

您也可以使用

+ [NSObject initialize]

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

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

https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/initialize

答案 3 :(得分:0)

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

然后在viewDidLoad的{​​{1}}中,检查代码是否已初始化;如果没有,则运行代码并将变量设置为true:

UIViewController