I am seeing everywhere that people initialise singletons like this in obj-c:
+ (instancetype)sharedInstance {
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [self new];
    });    
    return sharedInstance;
}
What happened to the plain old following?
+ (instancetype)sharedInstance {
    static id sharedInstance;
    if (!sharedInstance) {
        sharedInstance = [self new];
    }
    return sharedInstance;
}
Is there a significant benefit to the first method over the second one?
