2012-08-25 54 views
5

Một phần của những gì tôi đang phát triển là một công cụ tạo tên công ty ngẫu nhiên. Nó rút ra từ một vài mảng các phần tên. Tôi sử dụng hàm rand() để vẽ các phần tên ngẫu nhiên. Tuy nhiên, cùng một số "ngẫu nhiên" luôn được tạo trong cùng một trình tự mỗi lần Tôi khởi chạy ứng dụng, vì vậy các tên giống nhau luôn xuất hiện.Làm cách nào để hạt giống hàm rand() trong Objective-C?

Vì vậy, tôi đã tìm kiếm xung quanh SO và trong C có chức năng srand() để "hạt" hàm ngẫu nhiên với một cái gì đó giống như thời gian hiện tại để làm cho nó ngẫu nhiên hơn - như srand(time(NULL)). Có một cái gì đó như thế cho Objective-C mà tôi có thể sử dụng để phát triển iOS không?

Trả lời

8

Các chức năng rand()srand() là một phần của Thư viện chuẩn C và giống như phần còn lại của thư viện C hoàn toàn có sẵn cho bạn cho chúng tôi trong quá trình phát triển iOS với Objective-C. Lưu ý rằng các thói quen này đã bị thay thế bởi random()srandom(), hầu như có các quy ước gọi là rand()srand() nhưng tạo ra kết quả tốt hơn nhiều với thời gian lớn hơn. Ngoài ra còn có một thói quen srandomdev() khởi tạo trạng thái của trình tạo số ngẫu nhiên bằng cách sử dụng thiết bị số ngẫu nhiên. Đây cũng là một phần của Thư viện chuẩn C và có sẵn để sử dụng trên iOS trong Mục tiêu-C.

29

Tại sao bạn không sử dụng arc4random không yêu cầu hạt giống? Bạn sử dụng nó như sau:

int r = arc4random(); 

Here's một bài viết so sánh nó với rand(). Trang arc4random() người đàn ông nói điều này về nó so với rand():

các arc4random() chức năng sử dụng máy phát điện dòng chính được sử dụng bởi các thuật toán mã hóa arc4, trong đó sử dụng 8 * 8 8 chút S-Boxes. S-Boxes có thể ở khoảng (2 1700). Hàm arc4random() trả về pseudo- số ngẫu nhiên trong phạm vi từ 0 đến (2 32) -1, và do đó có hai lần phạm vi rand (3) và ngẫu nhiên (3).

Nếu bạn muốn có số ngẫu nhiên trong một phạm vi, bạn có thể sử dụng chức năng arc4random_uniform(). Ví dụ, để tạo ra một số ngẫu nhiên giữa 0 và 10, bạn sẽ làm điều này:

int i = arc4random_uniform(11); 

Dưới đây là một số thông tin từ trang người đàn ông:

arc4random_uniform (UPPER_BOUND) sẽ trả về một số ngẫu nhiên phân bố đều nhỏ hơn upper_bound. arc4random_uniform() được đề xuất trên các công trình như `` arc4random()% upper_bound '' vì nó tránh "độ lệch modulo" khi giới hạn trên không phải là công suất của hai.

+2

Kỹ thuật @ torrey.lyons trả lời câu hỏi của tôi trực tiếp hơn, nhưng tôi chắc chắn thích arc4random hơn là srand(). Cảm ơn – inorganik

Các vấn đề liên quan