Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

1.2 メモリ管理

Koya Tamura edited this page Sep 30, 2013 · 19 revisions

メモリ管理の考え方と ARC MemoryMgmt

参照カウント

reference count

Advanced Memory Management Programming Guide から引用

Objective-C ではインスタンスへの参照回数が 1 以上であればメモリ領域が確保され続けインスタンスは生存し続けます。

ARC

ARC では上記の retain, release はコンパイラが自動で補完してくれます。よって、書くとエラーが出てビルド出来ません。

ARC

Programming With ARC Release Notes から引用

オーナーシップ

参照には 強参照弱参照 があります。

強参照

参照先のオブジェクトのオーナーシップを持つ。自分がそのオブジェクトの参照を無くすまで確実に参照することができる。デフォルトこの設定

弱参照

参照先のオブジェクトのオーナーシップを持たない。そのオブジェクトが破棄されたら参照できなくなる。delegate や blocks 使うときに主に使用

循環参照

二つのオブジェクト間で相互に強参照を持つと循環参照が起き、解放されないオブジェクトがうまれる。

circular_reference

この場合、片方の参照を弱参照にして回避します。

circular_reference2

循環参照の例

{
    // MixiParentObject インスタンスへの強参照を parentObj が所持
    MixiParentObject *parentObj = [[MixiParentObject alloc] init];

    // MixiChildObject インスタンスへの強参照を childObj が所持
    MixiChildObject *childObj = [[MixiChildObject alloc] init];

    // MixiParentObject インスタンスのインスタンス変数が childObj への強参照を保持
    parentObj.obj = childObj;
    // MixiChildObject インスタンスのインスタンス変数が parentObj への強参照を保持
    childObj.obj = parentObj;

    //parentObj のスコープを超えるので、parentObj が MixiParentObject インスタンスへの参照を解除(解放)
    //childObj のスコープを超えるので、childObj が MixiChildObject インスタンスを解放

    // parentObj.obj が MixiChildObject インスタンスの強参照を保持
    // childObj.obj が MixiParentObject インスタンスの強参照を保持
}

はじめに

  1. iOSについて

  2. Xcode最初のステッフ

  3. 導入

  4. Objective C の基礎

  5. メモリ管理

  6. 1.3 UIViewController1 UIViewController のカスタマイズ(xib, autoresizing)

  7. 1.3 UIViewController1 UIViewController のカスタマイズ(storyboard)

  8. UIViewController2 - ModalViewController

  9. UIViewController2 - ModalViewController(storyboard)

  10. UIViewController3 - ライフサイクル

  11. HomeWork 1 Objective C の基本文法

  12. HomeWork 2 UIViewControllerとModalViewController

  13. HomeWork 3 UIViewController + Animation

  14. UIKit 1 - container, rotate-

  15. UINavigationController

  16. UITabController

  17. Custom Container View Controller

  18. Supporting Multiple Interface Orientations

  19. HomeWork 1 - タブバーからモーダルビューを表示する

  20. HomeWork 2 - NavigationController

  21. HomeWork 2.3 デバイスことに回転対応

  22. UIKit 2- UIView -

  23. UIView

  24. UIView のカスタマイズ

  25. UIView Animation

  26. HomeWork 1 - UIScrollView

  27. UIKit 3 - table view -

  28. UITableView について

  29. UITableViewとNavigationController

  30. custom UITableViewCell の作成

  31. UITableViewのその他のオプション、カスタマイズ

  32. HomeWork 1 - Dynamic height with a custom uitableviewcell

  33. UIKit 4 - image and text -

  34. UIImagePickerController

  35. Assets Library

  36. UITextFiled, UITextView

  37. KeyboardNotification

  38. Homework 1 - フォトの複数枚選択

  39. ネットワーク処理

  40. NSURLConnection

  41. JSONのシリアライズとデシリアライズ

  42. UIWebView

  43. ローカルキャッシュと通知

  44. NSUserDefaults, Settings Bundle

  45. NSFileManager

  46. Key Value Observing

  47. NSNotification、NSNotificationCenter を用いた通知

  48. UILocalNotification

  49. Blocks, GCD

  50. Blocks

  51. GCD

  52. 【演習】GCD,-Blocksを用いたHTTPリクエストマネージャの作成

  53. 設計とデザインパターン

  54. クラス設計 1

  55. クラス設計 2

  56. [クラス設計演習] (https://github.com/mixi-inc/iOSTraining/wiki/9.3-%E3%82%AF%E3%83%A9%E3%82%B9%E8%A8%AD%E8%A8%88%E6%BC%94%E7%BF%92)

  57. 開発ツール

  58. Instruments, デバッガ

  59. CocoaPods

  60. テスト

  61. iOS開発におけるテスト

  62. GHUnit

  63. Kiwi

  64. KIF

  65. In-App Purchase

  66. In-App Purchase

  67. 付録

  68. Tips of Xcode

  69. Auto Layout 入門

  70. Auto Layout ドリル

Edit sidebar

Clone this wiki locally