在哪里找到srandom(时间(null))

时间:2011-11-11 17:43:53

标签: iphone objective-c xcode4 srand

我在我的app的一个类的方法中使用函数random()%一些整数,我不知道在哪里放srandom(time(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()它什么都不改变。还是一样的数字

1 个答案:

答案 0 :(得分:2)

我认为这根本不是关于随机性或种子的问题,我不使用Objective-C,但是......

// for each loop iteration:
  [userresults setArray: .... ]      // <-- modify object known as userresults?
  [users setObject:userresults ....] // <-- isn't that the SAME userresults object?

也就是说,我相信你在users中多次拥有同一个对象:每次迭代都不应该创建 new 结果对象吗?

此外,请参阅srand() — why call it only once? - 为什么在此方法的顶部使用srand可能并不理想。或者,this post recommends arc4random,因为它不需要手动播种,是一个“更强大”的伪随机生成器。

快乐的编码。