使一些代码只运行一次
我有一些代码,我想在我的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
”