オブジェクトの暗号化


オブジェクトの暗号化は、オブジェクトクラスの ID と状態を変換し、保存されまたはプロセス間で転送することができる形式に変換します。クラスの型とインスタンスデータは、プログラムの終了後も永続できるバイト・ストリームに書き込まれます。プログラムを再度起動すると、新しく割り当てられたオブジェクトは、それ自身の記憶された表現を暗号化し、その前の実行時の状態に自分自身を復元できます。暗号化は通常、ファイルシステムに書き込むことができる形式(アーカイブ) にオブジェクトのグラフを置き、アーカイブと協力して発生します。アーカイブした物にアンアーカイブ操作をするのは、それ自体を復号するために、保存されたグラフ内の各オブジェクトを求めます。


オブジェクトの暗号化もまた、あるプロセスから他へ、オブジェクトを転送するための OS X の分散オブジェクト API で使用されています。しかし、その最も一般的な用途は、プロパティリストのように、オブジェクトの永続性のためのメカニズムの、アーカイブのためです。


object_encoding_2x


オブジェクトの暗号化と復号化する方法


サブクラスでは、そのインスタンスを暗号化および復号化するため、NSCoding プロトコルに準拠し、二つのメソッド、initWithCoder:encodeWithCoder: を実装しなければなりません。プログラムがオブジェクト・グラフをアンアーカイブまたはアーカイブすると、これらのメソッドが呼び出されます。 encodeWithCoder: メソッドでは、オブジェクトの重要なインスタンス変数の値を暗号化します。 initWithCoder: メソッドでは、それらの値を復号化し、それらのインスタンス変数を再割り当てします。オブジェクトが initWithCoder: メッセージを受信した場合は、その初期化メソッドのいずれも呼び出されません。


initWithCoder: の唯一の引数と、encodeWithCoder: は、NSCoder オブジェクトであり、その目的は実際の復号化や暗号化を実行することです。NSCoder は、抽象クラスであるため、コーダオブジェクトは、ほとんどの場合、以下の具象サブクラスの内の一つのインスタンスです、すなわちNSKeyedArchiverNSKeyedUnarchiver:NSArchiver、NSUnarchiver: です。アーカイバのクラスは、オブジェクトのインスタンス変数を暗号化するためのメソッドを宣言します。アンアーカイバのクラスは、インスタンス変数を復号化するためのメソッドを宣言します。


NSCoder メソッドはオブジェクト、スカラー、C 言語の配列、構造体、文字列、およびこれらの型へのポインタで動きます。独自のクラスのインスタンス変数を暗号化したり、復号化する前に、まず、スーパークラスの initWithCoder:encodeWithCoder: の実装を呼び出すようにしてください。バイトストリームからオブジェクトを復号化するときは、それらのインスタンス変数に割り当てるときにそれらを保持するか、コピーしてください。


キー付き対連続的アーカイブ


NSCoder の2つの具象サブクラスは、基本的な方法で互いに異なっています。"鍵付き" アーカイバクラス(NSKeyedArchiverNSKeyedUnarchiver) は、文字列キーで暗号化された値を伴い、その値を復号化するとき、同じキーを使用します。このようにしてインスタンス変数は暗号化され、任意の順序で復号化されます。他のタイプのコーダ(NSArchiverNSUnarchiver) を使用すると、特定の順序でインスタンス変数を暗号化し、同じ順序でそれらを復号化しなければなりません。連続的コーダーは、従来のコードと一緒にのみ使用する必要があり、新しいサブクラスはキー付きアーカイブコーダを使用する必要があります。



前提条件の記事

クラスの定義

プロトコル


関連記事

アーカイブ

プロパティ(特性)リスト

オブジェクトのライフサイクル


既出の議論

オブジェクトの暗号化と復号化


サンプルコードプロジェクト

Reducer






次の章
前の章
目次
Xcode の新機能

インターフェースビルダー ヘルプ
NSObject(class)
概要(NSObject,class)

  • アクセシビリティ
  • VoiceOver での作業
  • アクセサメソッド
  • 命名規則
  • アプリ ID
  • 明示的なアプリ ID は、一つのアプリに一致
    ワイルドカードアプリ ID は複数のアプリに一致
    アプリコード署名
  • ブロックオブジェクト
  • ブロックの宣言
    ブロックの作成
    変更可能なブロックの変数
    ブロックを使用する
    比較演算
  • バンドル
  • バンドルの構造と内容 バンドルリソースへのアクセス
    ロード可能なバンドル
  • カテゴリ
  • 宣言
    実装
  • クラスクラスタ
  • 利点
    検討事項
  • クラスの定義
  • インターフェース
    実装(Implementation)
  • クラスメソッド
  • サブクラス
    インスタンス変数
    self
  • ココア(タッチ)、Cocoa(Touch)
  • フレームワーク(Framework)
    言語
    コーディング規則
  • コレクション(Collection)
  • コレクションクラス
    順序付けスキーム
  • コントローラーオブジェクト
  • コントローラの調整
    ビューコントローラ
    仲介コントローラ(OS X)
    宣言されたプロパティ
  • デリゲート(Delegate)
  • デリゲートとココアフレームワーク
    デリゲートと通知
    データソース
    動的バインディング
  • 動的型付け
  • isa ポインタ
  • 列挙
  • NSEnumerator
    高速列挙
  • 例外処理
  • 例外の種類
    コンパイラディレクティブを使用した例外処理
    信号伝達のエラー
    フレームワーク
    情報プロパティリスト
  • 初期化
  • イニシャライザ宣言の型
    初期化子を実装
    国際化
  • 内観(イントロスペクション)
  • イントロスペクション情報の種類
  • キー値コーディング
  • オブジェクトのプロパティと KVC
    クラスを KVC に準拠させる
  • キー値監視
  • KVO の実装
    KVO はバインディングの不可欠な部分(OS X)
  • メモリ管理
  • メモリ管理の規則
    メモリ管理の側面
    メッセージ
    メソッドのオーバーライド
  • モデルオブジェクト
  • うまく設計されたモデルクラス
  • モデル・ビュー・コントローラ
  • モデルオブジェクト
    ビュー・オブジェクト
    コントローラオブジェクト
  • 複数のイニシャライザ
  • 指定イニシャライザ
    Nib ファイル
  • 通知
  • 通知オブジェクト
    通知を観察する
    通知を投稿
  • アーカイブ
  • 鍵付き連続アーカイバ
    鍵付きアーカイブの作成とデコード
  • オブジェクトの比較
  • 比較ロジックを実装する
  • オブジェクトのコピー
  • オブジェクトコピーのための要件
    メモリ管理への影響
  • オブジェクト作成
  • オブジェクト作成式の形式
    メモリ管理への影響
    ファクトリメソッド
  • オブジェクトの暗号化
  • オブジェクトの暗号化と復号化する方法
    キー付き対連続的アーカイブ
    オブジェクトグラフ
    オブジェクトのライフサイクル
    オブジェクトモデリング
  • オブジェクト可変性(mutability)
  • 可変オブジェクトを受け取る
    可変オブジェクトを格納
    オブジェクトの所有権
    Objective-C
  • プロパティ(特性)リスト
  • プロパティリストの型とオブジェクト
    プロパティリストのベストプラクティス
    プロパティリストのシリアライズ
  • プロトコル
  • 公式、非公式なプロトコル
    正式なプロトコルを採用、準拠
    独自のプロトコルを作成
    ルートクラス
  • セレクタ
  • セレクタの取得
    セレクタの使用
    シングルトン
  • 統一された型の ID
  • UTI は逆ドメイン·ネーム·システム規則を使用
    統一された型 ID は適合階層で宣言
    OS X のアプリは、アプリバンドルでそれらを定義して新しい UTIを追加
  • 値オブジェクト
  • NSValue