ios 单例的几种写法


GCD写法

+(Manager *)sharedManager{

    static dispatch_once_t predicate;
    static Manager * sharedManager;
    dispatch_once(&predicate, ^{
    sharedManager=[[Manager alloc] init];
    });
    return sharedManager;
}


不考虑线程安全的问题:

    + (id)sharedInstance {
        static testClass *sharedInstance = nil;
        if (!sharedInstance) {
            sharedInstance = [[self alloc] init];
        }
        return sharedInstance;
}


加锁之后就会存在 retain ……总之建议第一种方法 一般的项目这种方法可以满足,就是有时候项目需要的额话第一种更安全一点!!!!!


    + (id)sharedInstance {
        static testClass *sharedInstance = nil;
        @synchronized(self) {
            if (!sharedInstance) {
                sharedInstance = [[self alloc] init];
            }
        }
        return sharedInstance;
}



你可能感兴趣的:(ios 单例的几种写法)