出于测试和其他目的,能够生成多个可重复随机数流通常很有用。在 Java 中,有 java.util.Random。您可以创建多个 Random 对象,每个对象都有自己的种子,以便每次运行程序时对任何特定 Random 实例的后续调用都将返回相同的伪随机数序列。我看过 arc4random 的文档,它看起来像一个很棒的生成器。但是,我看不到任何提供种子或无论如何支持多个独立实例的方法。看起来 BSD 库函数的 random() 系列是最好的方法。类似于以下摘录...
@interface Random : NSObject {
@private
char _state[256];
}
+ (Random *)getDefaultInstance;
+ (Random *)getRepeatableInstance;
- (Random *)init;
- (Random *)initWithSeed:(unsigned)seed;
- (long)nextLong;
@end
@implementation Random
- (void)setup:(unsigned)seed
{
initstate(seed, _state, sizeof(_state));
}
- (Random *)init
{
self = [super init];
unsigned seed = (unsigned)arc4random();
[self setup:seed];
return self;
}
- (Random *)initWithSeed:(unsigned int)seed
{
self = [super init];
[self setup:seed];
return self;
}
- (long)nextLong
{
char *oldState = setstate(_state);
long result = random();
setstate(oldState);
return result;
}
@end
是否已经有其他东西可以做到这一点?我不关心线程安全。我不会跨线程使用生成器。