オブジェクト作成


オブジェクトは、オブジェクトにメモリを割り当て、合理的な初期値にその状態を設定する二段階プロセスを介して実行時存在するようになります。Objective-C のオブジェクトを割り当てるには、allocallocWithZone: メッセージをオブジェクトのクラスに送信します。実行環境は、オブジェクトのためにメモリを割り当て、クラスの"生" の(初期化されていない) インスタンスを返します。また、オブジェクトのクラスへの(isa ポインタとして知られている) ポインタも設定し、適切な型の値へ全てのインスタンスの変数をゼロにし、オブジェクトの保持カウントを1に設定します。


オブジェクトを割り当てたら、それを初期化しなければなりません。初期化は、オブジェクトのインスタンス変数を妥当な初期値に設定します。また、オブジェクトが必要とする他のグローバルなリソースを割り当て、準備することもできます。init メソッドや、名前が init で始まる他のいくつかのメソッドを呼び出すことで、オブジェクトを初期化します。これらの初期化のメソッドは、多くの場合、オブジェクトのインスタンス変数の開始する値を指定することができるように、1つ以上のパラメータを持っています。これらのメソッドが、オブジェクトの初期化に成功した場合、それらはそれを返します。それ以外の場合は、nil を返します。オブジェクトのクラスがイニシャライザを実装していない場合は、Objective-C 実行環境は、代わりに最も近い祖先​​のイニシャライザを呼び出します。


object_creation_2x


オブジェクト作成式の形式


Cocoa プログラミングの規約は、初期化呼び出しの内部割り当て呼び出しをネストする事です。


MyCustomClass *myObject = [[MyCustomClass alloc] init];


この形式を使用してオブジェクトを作成すると、返された値が、 nil でないことを先に進む前に確認する必要があります。メモリ管理コードでは、オブジェクトのインスタンス変数や他の割り当てられたメモリは、そのオブジェクト自体が解放される前に割り当て解除する必要があります。


メモリ管理への影響


明示的にメモリを管理するコードでは、割り当てと初期化の手順は、1の保持カウントを持つオブジェクトを返します。これは、オブジェクトを受信するクライアントがオブジェクトを今や"所有" し、それを解放する責任があることを意味します。それを release または autorelease メッセージを送信することにより、それを解放します。後者のメッセージは、解放遅れる原因となります。所有しているオブジェクトを解放しない場合は、あなたのプログラムは、メモリリークを発生します。


ファクトリメソッド


ファクトリメソッドは、クライアントに便利なように、クラスのインスタンスを作成する、クラスメソッドです。ファクトリメソッドは、1ステップで割り当てと初期化を結合し、クラスの自動解放インスタンスを返します。受け取ったオブジェクトが自動解放されるため、クライアントは、それがメモリに永続化しようとする場合、インスタンスをコピーするか保持する必要があります。ファクトリメソッドの名前には、以下の初期フォームがあります:


+(id)typeRemainderOfMethodName


ここで type は、クラス名から接頭辞を除いた部分で、RemainderOfMethodName はよく With や、From で始まります。例えば、


+ (id)dataWithContentsOfURL:(NSURL *)url;



前提条件の記事

メッセージ


関連記事

初期化

メモリ管理

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


既出の議論

OOP と Objective-C プログラミング言語 1.0オブジェクトとの作業






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