『エキスパートObjective-Cプログラミング - iOS/OS Xのメモリ管理とマルチスレッド』

こんにちわ。エンジニアの坂本 一樹(@splhack)です。

今回は、スマートフォンアプリ開発に非常に役立つ本を紹介させていただきます。

『エキスパートObjective-Cプログラミング - iOS/OS Xのメモリ管理とマルチスレッド』という本です。

はい、表紙画像からお分かりのとおり、私が執筆しました。つまり、このエントリは宣伝ということになってしまいますが、それはそれとして。とても深く、とてもわかりやすい本になっていると自負しております。いままでに培った技術をすべて注ぎ込みました。

本書は、AppleのiPhone/iPod touch/iPadといった、iOS搭載デバイスで動作するアプリ開発に非常に役立ちます。

  • Xcode 4.2から使用できるようになったAutomatic Reference Counting (ARC)
  • iOS 4から使用できるようになったBlocks
  • iOS 4から使用でき、iOS 5で進化したGrand Central Dispatch (GCD)

これらのARC、Blocks、GCDといった技術について、事細かに説明しています。

本書を読まなくてもAppleのリファレンスさえ読めば理解できる、というのはある程度真実ですが、本書では、Appleのリファレンスでは踏み込まない「実装」についても詳しく解説しています。つまり、Appleのドキュメントを読むだけでは到達できない真の理解にたどり着くことが可能となっています。

また、メモリ管理の考え方、マルチスレッドプログラミングの考え方、といった基本的な部分から説明していますので、アプリ開発の経験が浅い方でも導入として使用していただけます。

目次は以下のとおりです。

  • Automatic Reference Counting

    • Automatic Reference Countingとは何か?
    • メモリ管理 / 参照カウント

      • 概要
      • メモリ管理の考え方

        • 自分が生成したオブジェクトの所有者は、自分である
        • 自分が生成していないオブジェクトも、所有することができる
        • 自分が所有しているオブジェクトが必要なくなったら、解放する
        • 自分が所有してないオブジェクトを解放してはならない
      • alloc/retain/release/deallocの実装
      • Appleによる実装
      • autorelease
      • autoreleaseの実装
      • Appleによる実装
    • ARCのルール

      • 概要
      • メモリ管理の考え方
      • 所有修飾子

        • __strong修飾子
        • __weak修飾子
        • __unsafe_unretained修飾子
        • __autoreleasing修飾子
      • ルール

        • retain/release/retainCount/autoreleaseは使用できない
        • NSAllocateObject/NSDeallocateObjectは使用できない
        • メモリ管理に関するメソッド命名規則を守る
        • 明示的にdeallocを呼び出せない
        • NSAutoreleasePoolのかわりに@autoreleasepoolブロックを使用する
        • ゾーン(NSZone)は使用できない
        • オブジェクト型変数は、C言語の構造体(struct/union)のメンバになれない
        • 「id」と「void *」は明示的にキャストする
      • プロパティ
      • 配列
    • ARCの実装

      • __strong修飾子
      • __weak修飾子
      • __autoreleasing修飾子
      • 参照カウント
  • Blocks

    • Blocks概要

      • Blocksとは何か?
    • Blocksの仕様

      • Block構文
      • Block型変数
      • 自動変数値のキャプチャ
      • __block指定子
      • キャプチャした自動変数
    • Blocksの実装

      • Blockの実態
      • 自動変数値のキャプチャ
      • __block指定子
      • Blockの記憶域
      • __block変数の記憶域
      • オブジェクトのキャプチャ
      • __block変数とオブジェクト
      • Blockによる循環参照
      • copy/release
  • Grand Central Dispatch

    • Grand Central Dispatch概要

      • Grand Central Dispatchとは何か?
      • マルチスレッドプログラミング
    • Grand Central DispatchのAPI

      • Dispatch Queue
      • dispatch_queue_create
      • Main Dispatch Queue / Global Dispatch Queue
      • dispatch_set_target_queue
      • dispatch_after
      • Dispatch Group
      • dispatch_barrier_async
      • dispatch_sync
      • dispatch_apply
      • dispatch_suspend / dispatch_resume
      • Dispatch Semaphore
      • dispatch_once
      • Dispatch I/O
    • Grand Central Dispatchの実装

      • Dispatch Queue
      • Dispatch Source
    • コラム: ゾーン
    • コラム: Objective-C メソッド呼び出しの高速化
    • コラム: NSAutoreleasePoolオブジェクトをautorelease
    • コラム: __strong修飾子/__weak修飾子
    • コラム: Objective-Cのオブジェクトと、Core Foundationオブジェクト
    • コラム: オブジェクトの即時解放
    • コラム: allowsWeakReference/retainWeakReferenceメソッド
    • コラム: C++のthis、Objective-Cのself

このわかりやすいイラストは、弊社のデザイナ、いださとしが担当しました。

興味を持っていただけましたでしょうか。

本書は、電子書籍版と紙書籍版を用意しています。紙書籍版は、ARC/Blocks/GCD実例といったおまけがついておりますので、初心者の方にオススメです。

クラッシュしない、サクサク動くアプリを作って見たい方、ぜひお手にとってご確認いただければ幸いです。

(もちろん、弊社のアプリも改善中です!)