Making some code only run once

后端 未结 4 728
半阙折子戏
半阙折子戏 2020-12-02 13:41

I have some code that I would like to run only once in my MainViewController. It should run every time the user starts the app, but only after the MainViewController has loa

相关标签:
4条回答
  • 2020-12-02 13:57

    I don't see any problem with that code. I like using a BOOL (as you did) and then assigning either YES/NO or TRUE/FALSE just so that the code reads more nicely. I would assign TRUE to firstRun in didFinishLaunching, and set it FALSE after the code executes. In my code these type of conditionals usually look like this:

    @synthesize firstRun;
    
    -(void)viewDidLoad {
       [super viewDidLoad];
        if (firstRun) {
            // code to run only once goes here
            firstRun = FALSE;
        }
    }
    
    0 讨论(0)
  • 2020-12-02 14:02

    for Swift2.2,Xcode 7.3:

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

    Watch out "YourClassName.token"

    0 讨论(0)
  • 2020-12-02 14:13

    Swift 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");
    });
    

    Swift 3,4:

    dispatch_once is no longer available in Swift. In Swift, you can use lazily initialized globals or static properties and get the same thread-safety and called-once guarantees as dispatch_once provided 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.
    
    0 讨论(0)
  • 2020-12-02 14:13

    With 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()")
    }
    
    0 讨论(0)
提交回复
热议问题