使某些代码只运行一次

2024-04-30

我有一些代码只想在 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(使用前将#替换为@)

使某些代码只运行一次 的相关文章

随机推荐