最近在项目开发中遇到一个开发需求,需要在APP中自动生成自增的整数(int32_t)。
之前碰到的需求有关于如何生成随机数或生成UUID之类的唯一字符串,这种生成自增整数的需求比较少见,特别是在iOS开发中,百度相关的资料比较少,反而在网上有很多关于Java的算法比较多。还是感觉Java的同学比较幸运,现在网络上有很多类库,信手拈来就可以用。
当然不是说OC中没有实现的方法,其实仔细一样,这个问题貌似可以利用单例实现。这个念头也是我参考了java同学的实现灵机一动想起来的。不过有待验证,从原理上,单例是整个应用程序只会执行一次,如果在单例里面定义一种自增长的方法,这个问题就简单的解决了。
talk is cheap,show code...
.h头文件:
#import <Foundation/Foundation.h>
@interface GenerateNum : NSObject
@property (nonatomic) int value;
// 类方法
+(instancetype)shareManager;
// 自增方法
- (int)group;
@end
.m实现:
#import "GenerateNum.h"
@implementation GenerateNum
static GenerateNum *gNum;
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (gNum == nil) {
gNum = [super allocWithZone:zone];
gNum.value = 0;
}
});
return gNum;
}
+ (instancetype)shareManager {
return [[self alloc] init];
}
- (id)copyWithZone:(NSZone *)zone{
return gNum;
}
- (id)mutableCopyWithZone:(NSZone *)zone {
return gNum;
}
- (int)group {
++self.value;
return self.value;
}
后面继续验证有没有问题。