初期化


初期化は、合理的な初期値にその状態を設定することで、新たに割り当てられたオブジェクトが使用可能になる、オブジェクト作成の段階です。初期化は、常に割り当て直後に行なう必要があります。これは、初期化メソッド(または単に、初期化子) は、常に新しく割り当てられたオブジェクトに対して呼び出すことにより行われます。初期化子はまた、リソースのロードおよびヒープメモリ割り当てのような事を通して有用な状態にオブジェクトを持って来る他のセットアップ作業も実行できます。


イニシャライザ宣言の型


慣例により、初期化子の名前は、常に init で始まります。初期化は、動的に型指定されたオブジェクト(id)を返し、成功しなかった場合には nil を返します。初期化子は、初期値を指定する1つ以上のパラメータを含みます。


ここに、NSString クラスから初期化子の宣言のサンプルがあります:


- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding


初期化子を実装


クラスは、一般的にはそのオブジェクトの初期化子を実装していますが、必須ではありません。クラスが初期化子を実装していない場合は、Cocoa は、クラスの最も近い祖先​​のイニシャライザ(初期化子)を呼び出します。しかし、サブクラスは多くの場合、自分自身の初期化子を定義したり、クラス固有の初期化を追加するために、そのスーパークラスの初期化子を上書きします。クラスが初期化子を実装している場合は、最初のステップとして、そのスーパークラスのイニシャライザを呼び出します。この要件は、ルートオブジェクトから始めて、継承チェーンを下降して行くオブジェクトに対して一連の初期化を保証します。NSObject クラスは、デフォルトのオブジェクト初期化子として init メソッドを宣言し、そのため、常に最後に呼び出されますが、最初に返されます。


initialization_2x



初期化メソッドを実装するための基本的な手順は次のとおりです:


  1. スーパークラスのイニシャライザを呼び出し、それが返す値を確認します。(スーパークラスを指定するには予約語の super を使用してください)。値が nil でない場合は、スーパークラスの初期化子が、有効なオブジェクトが返し、初期化を進めることができます。

  2. オブジェクトのインスタンス変数に値を割り当てます。メモリ管理コードで、値がオブジェクト自身であれば、必要に応じて、それらをコピーするか、または保持します。

  3. 初期化されたオブジェクトを返すか、初期化が成功しなかった場合には、nil を返します。

以下の手順に従って簡単な初期化子を示し、現在の日付にその date のインスタンス変数を初期化する方法を示します。


- (id)init { if (self = [super init]) { // equivalent to "self does not equal nil" date = [[NSDate date] retain]; } return self; }


このコードでは、スーパークラスが nil を返す場合は、このメソッドは、初期化をスキップして、呼び出し元にその値を返します。


クラスは、複数の初期化子がある場合があります。初期化データが、利便性、供給したデフォルト値の問題としてさまざまな形態や場所、特定の初期化子を、取る場合にこれは発生します。この場合、初期化メソッドの1つは、初期化パラメータの完全な補完をとる、指定イニシャライザ と呼ばれます。


前提条件の記事

オブジェクト作成

メッセージ


関連記事

複数のイニシャライザ

オブジェクトのコピー

メモリ管理


既出の議論

Objective-C プログラミング 内のオブジェクトは動的に作成される






次の章
前の章
目次
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