最近在开发IOS应用,记录下Object-C单例模式的实现,并且与自己更为熟知的JAVA进行对比,加深对Object-C的语法印象。

首先看简单的JAVA的单例实现代码:

public class XTokenSqliteManager {
    /**
     * 单例
     */
    private static XTokenSqliteManager instance;

    private XTokenSqliteManager(){}
    /**
     * 获取单例
     * @return
     *  单例
     */
    public static synchronized XTokenSqliteManager getInstance(){
        if (instance == null){
            instance = new XTokenSqliteManager();
        }
        return instance;
    }

}

Object-C实现代码如下:

#import <Foundation/Foundation.h>


@interface XTokenSqliteManager : NSObject
/**
 * 获取单例
 * @return
 */
+ (instancetype)getInstance;

@end

@implementation XTokenSqliteManager {
}
static XTokenSqliteManager *instance;

+ (instancetype)getInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

@end

对比之下就相当好理解了,Object-C方法前面的 + 修饰符相当于 JAVA里的static 表明是个静态方法,和JAVA一样可以通过类名直接访问。dispatch_once 的作用相当于JAVA中的synchronized,用来保证线程安全的,要注意的是Object-C的静态成员变量使用 static 修饰符,静态函数使用+修饰符,静态成员变量放在 @implementation 里。

打赏
Object-C单例模式与JAVA单例模式对比
Tagged on:     

发表评论