最近在开发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单例模式对比