• 定义:
// @interface
#define singleton_interface(className) \
+ (className *)shared##className;

// @implementation
#define singleton_implementation(className) \
static className *_instance; \
+ (id)allocWithZone:(NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
+ (className *)shared##className \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
}

  • 使用:

    • .h

      @interface GeoApplication : NSObject
      singleton_interface(GeoApplication)
    • .m

      @implementation GeoApplication
      singleton_implementation(GeoApplication)
    • 实例

      GeoApplication *geoApplication = [GeoApplication sharedGeoApplication];