乱数生成関数の差異

2014. 06. 04
詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応」を読み始めて、乱数の生成にarc4random()関数を使用していたので、以前使用していたrand()random()関数との違いを調べてみました。


●宣言

rand()、random()、arc4random()、arc4random_uniform()関数は、いずれもstdlib.hで以下のように宣言されています。

int rand(void);

long random(void);

u_int32_t arc4random(void);

u_int32_t arc4random_uniform(u_int32_t /*upper_bound*/)
                __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);

arc4random()とarc4random_uniform()関数は、戻り値がu_int32_t(32bit unsigned int)なので、型変換する際には注意が必要です。
(「Qiita/Objective-C/arc4randomの罠」や「だいきちのブログ/気ままにObjective-C/arc4random()でマイナス値が出ることについての考察」参照)


●各関数の差異

乱数発生の内部処理に関しては「和田維作のホームページ/良い乱数・悪い乱数」などを参照していただくとして、実際に利用する立場としてどの関数を使うべきかを考えます。

rand()関数は「Mac OS X Manual Page/srand(3)」で"悪い乱数ジェネレータ(bad random number generator)"であるとしてrandom()関数を使用するように求めています。

random()関数は「Mac OS X Manual Page/random(3)」で"良い乱数ジェネレータ(better random number generator)"としていますが、rand()と同様にそのままでは再現性を有するという欠点があり、暗号化品質を求めるならばarc4random()を使用するよう推奨されています。

ただしrand()はsrand()、random()はsrandom()関数でシード値を与えることで再現性を回避することはできます。

arc4random()関数は、rand()やrandom()の2倍の範囲を持つARC4(「Wikipedia/RC4」参照)由来の乱数ジェネレータですが、上限が2のべき乗でない場合にモジュロバイアスが発生するという欠点があります。

例えば0から(2のべき乗でない)9までの乱数を求めようとすると、出現する値が偏在してしまうという問題があります。
(「Learn iPhone, iOS, Objective-c, cocos2dx, Unity and ....?/Objective-C - arc4random()が生成する乱数の偏りについて」参照)

arc4random_uniform()関数は、arc4random()のモジュロバイアス問題を解決しているので推奨されています。

またarc4random_uniform()はシード値を与える必要も無いので、(Mac OS X 10.7またはiOS 4.3以降であれば)通常はarc4random_uniform()を使うと良いでしょう。


●各関数の正規分布

実際に各関数を実行した結果が気になるところですので試してみます。

テスト環境)
・iMac 21.5" Late 2013(OS X 10.9.3)
・Xcode 5.1.1
・iOS シミュレータ ver.7.1(iPhone Retina 4inch 64bit)

※実機テストではないのでご注意ください。

各関数で0〜9の乱数を100,000個発生し、0〜9の各整数についての標準偏差を計算しました。
(標準偏差については「経済指標のかんどころ/第14章 統計/平均と標準偏差」を参照)

rand()関数の標準偏差

// 生成する乱数の数と乱数の範囲の設定
const int sampleNumber = 100000;    // 標本数
const int rangeNumber = 10;              // 乱数上限

// 乱数を収納する可変配列の作成
NSMutableArray *randArray = [NSMutableArray array];

// 乱数を生成し、可変配列へ収納
for (int i = 0; i < sampleNumber; i++) {
    randArray[i] = @(rand() % rangeNumber);    // 乱数生成
}

// 分散と標準偏差用の変数の初期化
double randSum = 0, randSD = 0;

for (int j = 0; j < rangeNumber; j++) {
    // 抽出用に可変配列をコピー
    NSMutableArray *randArrayCopy = [NSMutableArray arrayWithArray:randArray];
    // 抽出条件の設定
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K == %d", @"self", j];
    // コピーした可変配列から特定の整数を持つ要素を抽出
    [randArrayCopy filterUsingPredicate:pred];
    // 抽出した要素数から平均個数を引いて偏差を求め、2乗して求めた分散を順次加算
    randSum += pow(abs((int)randArrayCopy.count - sampleNumber / rangeNumber), 2);
}

// 集計した分散を標本数で割り、平方根を取って標準偏差を求める
randSD = sqrt(randSum / rangeNumber);

// 標準偏差の出力
NSLog(@"randSD = %f", randSD);

他の関数は乱数生成の行以外は同様です。
rand()とrandom()に関してはsrand()およびsrandom()でシードを与えた場合も試しました。
(シードは最初の可変配列を作る前に作成しています。)

// rand() + srand()標準偏差
srand((unsigned int)time(NULL));

// random()標準偏差
randomArray[i] = @(random() % rangeNumber);

// random() + srandom()標準偏差
srandom((unsigned int)time(NULL));

// arc4random()標準偏差
arc4randomArray[i] = @(arc4random() % rangeNumber);

// arc4random_uniform()標準偏差
arc4random_uniformArray[i] = @(arc4random_uniform(rangeNumber));

10回試行した結果を下表に示します。

試行回数rand()rand() +
srand()
random()random() +
srandom()
arc4random()arc4random
_uniform()
1138.35169.597100.77965.41787.782103.105
2138.35188.729100.779112.28494.74958.579
3138.35192.961100.77987.45898.28882.492
4138.35186.401100.779121.59867.549105.556
5138.351130.972100.779121.43898.821165.072
6138.351105.360100.77955.88776.107138.548
7138.35194.855100.779123.53282.932103.739
8138.35193.039100.77958.762112.18069.430
9138.351117.240100.779138.66264.48296.635
10138.35186.202100.77979.577147.49398.373
算術平均138.35196.536100.77996.461593.038102.153

こうして見るとrand()とrandom()に関しては再現性があり、シードを与えることでそれを回避できるとともに分散が減少することが分かります。
しかしモジュロバイアスを回避しているはずのarc4random_uniform()の方が、arc4random()より分散が増大していることも分かります。

納得できなかったので標本数を1,000,000個にして試しました。

試行回数rand()rand() +
srand()
random()random() +
srandom()
arc4random()arc4random
_uniform()
1336.788195.484212.112375.150294.668324.041
2336.788265.282212.112171.093306.084287.701
3336.788267.296212.112282.826258.322223.949
4336.788342.466212.112205.370317.153290.070
5336.788163.419212.112288.707254.005204.910
6336.788269.651212.112169.555254.979433.367
7336.788469.068212.112360.910404.388242.687
8336.788379.788212.112293.812288.210270.242
9336.788383.043212.112156.895302.076243.467
10336.788386.001212.112120.170289.877224.977
算術平均336.788312.150212.112242.449296.976274.541

arc4random_uniform()がarc4random()に比べて若干減少したものの、今度はただのrandom()よりシードを与えたrandom()が上回るとともに、arc4random()とarc4random_uniform()がrandom()よりも上回る結果となりました。

この結果が試行回数が少ないせいか、他の条件が悪いせいなのか、環境に依るものかは分かりません。
(プログラムではrand() → rand() + srand() → ・・・ → arc4random_uniform()と一連で実行しているので、その影響があるかもしれません。それぞれ単体で実行した場合と結果が異なるかと思います。)

ですがrand()は非推奨であり、random()も再現性を伴うため使用するのが憚れますし、arc4random_uniform()がモジュロバイアスを回避するものと明言されている以上、今回の試行結果から使用を躊躇する理由にはならないでしょう。

一先ず現状ではiOS 4.3以降をターゲットにしているならば、arc4random_uniform()を使用することを勧めます。



参考文献

Mac OS X Manual Page/srand(3)

Mac OS X Manual Page/random(3)

Mac OS X Manual Page/arc4random(3)

Mac OS X Manual Page/arc4random_uniform(3)

Qiita/Objective-C/arc4randomの罠

だいきちのブログ/気ままにObjective-C/arc4random()でマイナス値が出ることについての考察

和田維作のホームページ/良い乱数・悪い乱数

Wikipedia/RC4

Learn iPhone, iOS, Objective-c, cocos2dx, Unity and ....?/Objective-C - arc4random()が生成する乱数の偏りについて

経済指標のかんどころ/第14章 統計/平均と標準偏差

詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応
(2013/11/02)
大重 美幸

商品詳細を見る

NSArrayクラス

2014. 06. 03
・継承
NSObject

・準拠
NSCopying
NSMutableCopying
NSFastEnumeration
NSSecureCoding
NSObject (NSObject)

・フレームワーク
/System/Library/Frameworks/Foundation.framework

・利用可能
iOS 2.0以降で利用可能

・手引書
Collections Programming Topics

・宣言
NSArray.h
NSKeyValueCoding.h
NSKeyValueObserving.h
NSPathUtilities.h
NSPredicate.h
NSSortDescriptor.h



●概要

NSArrayとそのサブクラスであるNSMutableArrayは、配列と呼ばれるオブジェクトの順序付きコレクションを管理します。
NSArrayは静的な配列を、NSMutableArrayは動的な配列を作成します。
オブジェクトの順序付きコレクションが必要な時に、配列を使用することができます。

NSArrayにはCore Foundationで「toll-free bridged」に対応するCFArrayRefがあります。
toll-free bridgingの詳細については「Toll-Free Bridging」を参照してください。


サブクラス化における注意事項

NSArrayのサブクラス化をする理由は、一般的にあまりありません。
クラスはオブジェクトの順序付きコレクションを維持するように適切に設計されています。
しかしカスタムのNSArrayオブジェクトが役に立つ可能性がある状況があります。
いくつかの可能性をここに示します。
  • NSArrayでそのコレクションの要素を格納する方法を変更する。
    パフォーマンス上の理由、または旧来のコードとの互換性を高めるために行う可能性があります。

  • (統計情報の収集など)コレクションに何が起こったのかについての詳細情報を取得する。

オーバーライドするメソッド

NSArrayのサブクラスでは、プリミティブなインスタンスメソッドであるcountobjectAtIndex:をオーバーライドする必要があります。
これらのメソッドは、コレクションの要素を提供するバッキングストアで操作する必要があります。
このバッキングストアのために静的配列、標準のNSArrayオブジェクト、または他のデータ型やメカニズムを使用することができます。
また代替となる実装を提供したい場合に、他のNSArrayメソッドを部分的または完全にオーバーライドする選択をすることもできます。

サブクラスにイニシャライザを実装する場合、サブクラスが管理しているバッキングストアに適したものにする可能性があります。
その場合、イニシャライザはNSArrayクラスで指定されたイニシャライザのinitまたはinitWithObjects:count:のいずれかを呼び出す必要があります。
NSArrayクラスはNSCopying、NSMutableCopying、そしてNSCodingプロトコルを採用しているため、コピーまたはコーディンから独自のカスタムサブクラスのインスタンスを作成したい場合、これらのプロトコルのメソッドをオーバーライドします。

NSArrayはクラスクラスタのパブリックインターフェイスであり、サブクラスが何をもたらすかを覚えておいてください。
サブクラス用のストレージを提供し、ストレージに基づいて直接働くプリミティブメソッドを実装する必要があります。

サブクラス化の代替手段

NSArrayのカスタムクラスを作成する前に、NSPointerArrayや対応するCore Foundation型のCFArray Referenceを調べてください。
NSArrayとCFArrayは「toll-free bridged」なため、コード内のNSArrayオブジェクトを(適切なキャストで)CFArrayオブジェクトに置換することができます。
これらは対応している型ですが、CFArrayとNSArrayは同一のインターフェイスや実装を持っていないため、NSArrayで容易にできないことがCFArrayでできることが時々あります。
例えばCFArrayはコールバックのセットを提供しており、その内のいくつかはカスタムのretain-release動作を実装するためのものです。
これらのコールバックにNULL実装を指定した場合、非保持配列を容易に取得することができます。

既存のクラスに補足的な動作を追加したい場合、NSArrayにカテゴリを記述することができます。
ただしカテゴリは使用するNSArrayの全てのインスタンスに影響するため、意図していない結果が生ずる可能性があることを覚えておいてください。
その代わり、望む動作を獲得するための構成を使用することができます。



●タスク

●配列の作成

+ array
+ arrayWithArray:
+ arrayWithContentsOfFile:
+ arrayWithContentsOfURL:
+ arrayWithObject:
+ arrayWithObjects:
+ arrayWithObjects:count:

●配列の初期化

– init
– initWithArray:
– initWithArray:copyItems:
– initWithContentsOfFile:
– initWithContentsOfURL:
– initWithObjects:
– initWithObjects:count:

●配列のクエリ

– containsObject:
– count
– getObjects:range:
– firstObject
– lastObject
– objectAtIndex:
– objectAtIndexedSubscript:
– objectsAtIndexes:
– objectEnumerator
– reverseObjectEnumerator
– getObjects:    iOS 4.0では非推奨

●配列内のオブジェクトの検索

– indexOfObject:
– indexOfObject:inRange:
– indexOfObjectIdenticalTo:
– indexOfObjectIdenticalTo:inRange:
– indexOfObjectPassingTest:
– indexOfObjectWithOptions:passingTest:
– indexOfObjectAtIndexes:options:passingTest:
– indexesOfObjectsPassingTest:
– indexesOfObjectsWithOptions:passingTest:
– indexesOfObjectsAtIndexes:options:passingTest:
– indexOfObject:inSortedRange:options:usingComparator:

●要素へのメッセージの送信

– makeObjectsPerformSelector:
– makeObjectsPerformSelector:withObject:
– enumerateObjectsUsingBlock:
– enumerateObjectsWithOptions:usingBlock:
– enumerateObjectsAtIndexes:options:usingBlock:

●配列の比較

– firstObjectCommonWithArray:
– isEqualToArray:

●新規配列の導出

– arrayByAddingObject:
– arrayByAddingObjectsFromArray:
– filteredArrayUsingPredicate:
– subarrayWithRange:

●並べ替え

– sortedArrayHint
– sortedArrayUsingFunction:context:
– sortedArrayUsingFunction:context:hint:
– sortedArrayUsingDescriptors:
– sortedArrayUsingSelector:
– sortedArrayUsingComparator:
– sortedArrayWithOptions:usingComparator:

●文字列要素の操作

– componentsJoinedByString:

●内容記述の作成

– description
– descriptionWithLocale:
– descriptionWithLocale:indent:
– writeToFile:atomically:
– writeToURL:atomically:

●パスの収集

– pathsMatchingExtensions:

●キー値の監視

– addObserver:forKeyPath:options:context:
– removeObserver:forKeyPath:
– removeObserver:forKeyPath:context:
– removeObserver:fromObjectsAtIndexes:forKeyPath:context:
– addObserver:toObjectsAtIndexes:forKeyPath:options:context:
– removeObserver:fromObjectsAtIndexes:forKeyPath:

●キー値コーディング

– setValue:forKey:
– valueForKey:



●クラスメソッド

array

空の配列を作成して返します。

+ (instancetype)array

戻り値
空の配列

解説
このメソッドはNSArrayの可変サブクラスで使用されます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithArray:

別の指定した配列内のオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithArray:(NSArray *)anArray

パラメータ

anArray
配列です。

戻り値
anArray内のオブジェクトを含む配列です。

解説
このメソッドはNSArrayの可変サブクラスで使用されます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithContentsOfFile:

指定したパスで指定されたファイルのコンテンツに含まれている配列を作成して返します。

+ (id)arrayWithContentsOfFile:(NSString *)aPath

パラメータ

aPath
writeToFile:atomically:メソッドで生成される配列の文字列表現含むファイルへのパスです。

戻り値
aPathで指定されたファイルのコンテンツを含む配列です。
ファイルが開けない、またはファイルのコンテンツが配列に解析できない場合はnilを返します。

解説
aPathで識別されるファイル内の配列表現は、プロパティリストオブジェクト(NSString、NSData、NSDate、NSNumber、NSArray、またはNSDictionaryオブジェクト)のみ含まれている必要があります。
詳細についてはProperty List Programming Guideを参照してください。
この配列に含まれるオブジェクトは、配列が可変であっても不変になります。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithObject:

指定したオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
単一要素anObjectを含む配列です。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


arrayWithObjects:

引数リスト内のオブジェクトを含む配列を作成して返します。

+ (instancetype)arrayWithObjects:(id)firstObj,,...

パラメータ

firstObj, ...
nil終端のオブジェクトのコンマ区切りのリストです。

戻り値
引数リストのオブジェクトを含む配列です。

解説
以下のコードは3つの異なる型の要素を含む配列の作成例です。

NSArray *myArray;
NSDate *aDate = [NSDate distantFuture];
NSValue *aValue = [NSNumber numberWithInt:5];
NSString *aString = @"a string";

myArray = [NSArray arrayWithObjects:aDate, aValue, aString, nil]; 

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h



●インスタンスメソッド

containsObject:

指定したオブジェクトが配列に含まれているかどうかを示すブール値を返します。

- (BOOL)containsObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
配列にanObjectが含まれている場合はYES、それ以外の場合はNOです。

解説
このメソッドは各配列のオブジェクトにisEqual:メッセージを送信する(そして各isEqual:メッセージにパラメータとしてanObjectを渡す)ことによって、anObjectが配列内に含まれているかどうかを決定します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


count

現在の配列内のオブジェクト数を返します。

- (NSUInteger)count

戻り値
現在の配列内のオブジェクト数です。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


indexOfObject:

指定したオブジェクトと等しい値の、対応する配列の最少インデックスを返します。

- (NSUInteger))indexOfObject:(id)anObject

パラメータ

anObject
オブジェクトです。

戻り値
anObjectと等しい値の、対応する配列の最少インデックスです。
配列内にanObjectと等しいオブジェクトが無い場合、NSNotFoundを返します。

解説
インデックスは0から始まり、一致するものが見つかるか配列の最後まで到達するまで、配列内の各要素にisEqual:メッセージを送信します。
このメソッドは、各isEqual:メッセージにanObjectパラメータを渡します。
オブジェクトは
NSObjectプロトコルで宣言されている)isEqual:がYESを返した場合、オブジェクトは等しいと見なされます。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


initWithContentsOfFile:

指定したパスのファイルのコンテンツで、新たに割り当てた配列を初期化します。

- (id)initWithContentsOfFile:(NSString *)aPath

パラメータ

aPath
writeToFile:atomically:メソッドによって生成された配列の表現を含むファイルへのパスです。

戻り値
aPathで指定されたファイルのコンテンツを含む初期化された配列、あるいはファイルが開けなかったかファイルのコンテンツで配列を解析できなかった場合はnilを返します。
返されるオブジェクトは元のレシーバとは異なる場合があります。

解説
aPathで識別されるファイル内の配列表現は、プロパティリストオブジェクト(NSString、NSData、NSNumber、NSArray、またはNSDictionaryオブジェクト)のみ含まれている必要があります。
この配列に含まれるオブジェクトは、配列が可変であっても不変になります。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


initWithObjects:

引数リスト内にオブジェクトを配置することによって、新たに割り当てた配列を初期化します。

- (instancetype)initWithObjects:(id)firstObj,,...

パラメータ

firstObj,...
nil終端のオブジェクトのコンマ区切りのリストです。

戻り値
引数リストオブジェクトを含むように初期化された配列です。
返されるオブジェクトは元のレシーバとは異なる場合があります。

解説
この方法で初期化した不変配列は、後に変更を加えることはできません。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


lastObject

配列内の最後のオブジェクトを返します。

- (id)lastObject

戻り値
配列内の最後のオブジェクトです。
配列が空の場合はnilを返します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


objectAtIndex:

指定したインデックスの場所にあるオブジェクトを返します。

- (id)objectAtIndex:(NSUInteger)index

パラメータ

index
配列の範囲内のインデックスです。

戻り値
indexにあるオブジェクトです。

解説
indexが配列の最後を超える(つまりindexがcountで返される値と等しいか大きい)場合はNSRangeExceptionが発生します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


sortedArrayUsingSelector:

指定したセレクタの比較メソッドによる決定方法で、受信側の配列要素を昇順に並べた配列を返します。

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator

パラメータ

comparator
一度に2つの要素を比較するために使用するメソッド識別するセレクタです。
メソッドは受信側の配列が引数より小さい場合はNSOrderedAscendingを、大きい場合はNSOrderedDescending、等しければNSOrderedSameを返します。

戻り値
指定したセレクタcomparatorの比較メソッドによる決定方法で、受信側の配列要素を昇順に並べた配列です。

解説
新しい配列は受信側の配列要素への参照が含まれており、コピーではありません。

comparatorメッセージは配列内の各オブジェクトに送信され、単一の引数として配列内の別のオブジェクトを持ちます。

例えばNSStringオブジェクトの配列では、NSStringクラスで宣言されているcaseInsensitiveCompare:メソッドを使用することによって並べ替えることができます。
anArrayが存在すると仮定した場合、以下の方法で配列の並べ替えたバージョンを作成することができます。

NSArray *sortedArray = [anArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h


writeToFile:atomically:

指定したパスにあるファイルに配列のコンテンツを書き出します。

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

パラメータ

path
配列のコンテンツを書き出すパスです。
pathにチルダ(~)が含まれている場合は、このメソッドを呼び出す前にstringByExpandingTildeInPathで展開する必要があります。

flag
YESの場合、配列は一旦補助ファイルに書き込まれ、その後補助ファイルがパス名に書き換えられます。
NOの場合、配列はパスに直接書き込まれます。
YESオプションはpathを保証し、仮にシステムが書き込み中にクラッシュした場合でも破壊されません。

戻り値
ファイルの書き込みが成功した場合はYES、それ以外はNOです。

解説
配列のコンテンツが全てプロパティリストオブジェクト(NSString、NSData、NSArray、またはNSDictionaryオブジェクト)の場合、このメソッドで書き込まれるファイルにはクラスメソッドarrayWithContentsOfFile:またはインスタンスメソッドinitWithContentsOfFile:を使用することができます。
このメソッドは、ファイルに書き出す前に含まれている全てのオブジェクトがプロパティリストオブジェクトであることを再帰的に検証し、全てのオブジェクトがプロパティリストオブジェクトでない場合、結果ファイルが有効なプロパティリストではないためNOを返します。

利用可能
iOS 2.0以降で利用可能。

宣言
NSArray.h



●定数



参考文献

NSArray Class Reference

Randomization Services

2014. 06. 01
・フレームワーク
Security/Security.h

・宣言
SecRandom.h



●概要

Randomization Servicesは、暗号技術的にセキュアな乱数を生成するAPIです。



●関数

SecRandomCopyBytes

暗号技術的にセキュアなランダムバイトの配列を生成します。

int SecRandomCopyBytes (
SecRandomRef rnd,
size_t count,
uint8_t *bytes
);

パラメータ

rnd
使用する乱数ジェネレータオブジェクトです。
デフォルトの乱数ジェネレータを使用するようにkSecRandomDefaultを指定します。

count
bytesパラメータで示す配列内のランダムバイトの数です。

bytes
関数によって生成されるランダムバイトです。

戻り値
関数が正常に完了した場合は0を、エラーがあった場合は-1を返します。
エラーはerrnoシステム変数を確認してください。

解説
この関数は暗号技術的にセキュアなランダムバイトの配列を取得するために/dev/randomから読み込みます。
/dev/randomの乱数ジェネレータについての詳細は、random(4)のマニュアルページを参照してください。

利用可能
iOS 2.0以降で利用可能。

宣言
SecRandom.h



●データ型

SecRandomRef

乱数ジェネレータに関する情報を含む、抽象Core Foundation型のオブジェクトです。

typedef const struct __SecRandom * SecRandomRef;

利用可能
iOS 2.0以降で利用可能。

宣言
SecRandom.h



●定数

・乱数ジェネレータのデフォルト

デフォルトの乱数ジェネレータを示します。

const SecRandomRef kSecRandomDefault;

定数

kSecRandomDefault
乱数ジェネレータの基準としてSecRandomCopyBytes関数に渡された時、この定数はデフォルトの乱数ジェネレータが使用されるべきであることを示します。

この定数はNULLと同義語です。

利用可能
iOS 2.0以降で利用可能。

宣言
SecRandom.h



参考文献

Randomization Services Reference






Bose QuietComfort 25
Calendar
05 | 2014/06 | 02
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
WACOM


Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
BOSE

Bose QuietComfort 25
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
SQLite
OpenGL ES
Amazon


Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Profile

Author:水月杏香
永遠の初心者プログラマ。

QR Code
QR
Visitors