我有一些代码只想在 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;
}
}
有任何想法吗?
斯威夫特1,2:
static var token: dispatch_once_t = 0
dispatch_once(&token) {
NSLog("Do it once")
}
Objective-C
static dispatch_once_t once;
dispatch_once(&once, ^ {
NSLog(@"Do it once");
});
斯威夫特 3,4:
dispatch_once 在 Swift 中不再可用。在 Swift 中,您可以使用
延迟初始化全局变量或静态属性并获得相同的结果
线程安全和调用一次保证作为dispatch_once提供苹果文档 https://swift.org/migration-guide-swift3/
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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)