我有一些代码,我想在我的MainViewController中只运行一次.它应该在用户每次启动应用程序时运行,但仅在MainViewController加载后运行.
我不想运行它-(void)applicationDidFinishLaunching:(UIApplication *)application
.
这是我的想法:
MainViewController.h
@interface IpadMainViewController : UIViewController <UISplitViewControllerDelegate> {
BOOL hasRun;
}
@property (nonatomic, assign) BOOL hasRun;
Run Code Online (Sandbox Code Playgroud)
MainViewController.m
@synthesize hasRun;
-(void)viewDidLoad {
[super viewDidLoad];
if (hasRun == 0) {
// Do some stuff
hasRun = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
And*_*rey 79
斯威夫特1,2:
static var token: dispatch_once_t = 0
dispatch_once(&token) {
NSLog("Do it once")
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的
static dispatch_once_t once;
dispatch_once(&once, ^ {
NSLog(@"Do it once");
});
Run Code Online (Sandbox Code Playgroud)
斯威夫特3,4:
在Swift中不再提供dispatch_once.在Swift中,您可以使用延迟初始化的全局变量或静态属性,并获得相同的线程安全性和一次性保证,因为dispatch_once提供了 Apple doc
let myGlobal = { … global contains initialization in a call to a closure … }()
_ = myGlobal // using myGlobal will invoke
// the initialization code only the first time it is used.
Run Code Online (Sandbox Code Playgroud)
我没有看到该代码有任何问题.我喜欢使用BOOL(就像你一样),然后分配YES/NO或TRUE/FALSE,以便代码读得更好.我会在didFinishLaunching中为firstRun指定TRUE,并在代码执行后将其设置为FALSE.在我的代码中,这些类型的条件通常如下所示:
@synthesize firstRun;
-(void)viewDidLoad {
[super viewDidLoad];
if (firstRun) {
// code to run only once goes here
firstRun = FALSE;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16232 次 |
最近记录: |