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