使一些代码只运行一次

我有一些代码,我想在我的MainViewController只运行一次。 它应该在用户每次启动应用程序时运行,但只有在加载MainViewController之后。

我不想在-(void)applicationDidFinishLaunching:(UIApplication *)application运行它。

这是我的想法:

MainViewController.h

 @interface IpadMainViewController : UIViewController <UISplitViewControllerDelegate> { BOOL hasRun; } @property (nonatomic, assign) BOOL hasRun; 

MainViewController.m

 @synthesize hasRun; -(void)viewDidLoad { [super viewDidLoad]; if (hasRun == 0) { // Do some stuff hasRun = 1; } } 

有任何想法吗?

你可以使用dispatch_once

Objective-C的

 static dispatch_once_t once; dispatch_once(&once, ^ { NSLog(@"Do it once"); }); 

迅速

 static var token: dispatch_once_t = 0 dispatch_once(&token) { NSLog("Do it once") } 

我没有看到该代码的任何问题。 我喜欢使用BOOL(就像你所做的那样),然后分配YES / NO或TRUE / FALSE,以便代码读得更好。 我将在didFinishLaunching中为firstRun分配TRUE,并在代码执行后将其设置为FALSE。 在我的代码中,这些types的条件通常是这样的:

 @synthesize firstRun; -(void)viewDidLoad { [super viewDidLoad]; if (firstRun) { // code to run only once goes here firstRun = FALSE; } } 

用Swift2.0,Xcode 7.0

 var token: dispatch_once_t = 0 override func viewDidLoad() { super. viewDidLoad() dispatch_once(&token) { println("This is printed only on the first call to test()") } println("This is printed for each call to test()") } 

对于Swift2.2,Xcode 7.3:

 static var token: dispatch_once_t = 0 dispatch_once(&YourClassName.token) { NSLog("Do it once") } 

注意“ YourClassName.token