Я использую функцию random()%some integer в методе одного из классов моего приложения, и я понятия не имею, куда поместить srandom (время (NULL)) для генерации не псевдослучайных, а настоящих случайных чисел. Я уже поставил его в viewDidLoad и viewWillAppear, но это не помогает.
- (NSMutableDictionary *)getUsersFromServer
{
srand(time(NULL));
//here we're getting list of users from the server
NSMutableDictionary * users = [[[NSMutableDictionary alloc] init] autorelease];
for (int i = 0;i < 19;i++)
{
int wins = rand()%100; float f_wins = (float)wins;
int losses = rand()%100; float f_losses = (float)losses;
int withdr = rand()%100; float f_withdr = (float)withdr;
float win_per = f_wins / ((f_wins + f_losses + f_withdr) / 100.0);
[userresults setArray:[NSMutableArray arrayWithObjects:[NSNumber numberWithInt:wins],
[NSNumber numberWithInt:losses],
[NSNumber numberWithInt:withdr],
[ NSNumber numberWithFloat:win_per],
nil]];
[users setObject:userresults forKey:[NSString stringWithFormat:@"Pfeffer ID %i",i]];
}
[userresults release];
return users;
}
как-то так... код выглядит ужасно, но его смысл понятен. rand() выдает одинаковые числа для каждой итерации цикла. Если я использую arc4random(), это ничего не меняет. все те же цифры
srandom
,srand
и т. д. просто устанавливает начальное состояние или начальное состояние, генератора псевдослучайных чисел. Обычно начальное значение устанавливается один раз (до использованияrand
/random
) и желательно не на основе тиков напрямую... Я не уверен, какие рекомендации существуют для IOS в противном случае. - person   schedule 11.11.2011arc4random
было рекомендовано в этом сообщении, касающемся IOS. - person   schedule 11.11.2011srand
действительно вызывается (сначала) и что он не вызывается повторно (что может нарушить внутреннее состояние). Кроме того, обязательно используйтеsrand/rand
илиsrandom/random
в качестве пары. - person   schedule 11.11.2011