非常に判りやすい説明ありがとう

ここに Mac OS-Xのメモリ管理方法についての判りやすい説明がありました 今勉強中なのです

Mac向けの開発言語として OS X v10.5 (Leopard) から Objective-C に代わって Objective-C 2.0 が導入されました.Objective-C 2.0 は Objective-C を大幅に拡張したものですが,その中の最大のものはガベージコレクタの導入でしょう.もはや retain/release は考えなくてよくなったのです.

その後登場した iOS (当時は iPhone OS)では Objective-C 2.0 が採用されましたがガベージコレクタは引き継がれませんでした.プログラマは手動で retain/release しなければならないのです.(リファレンスカウンタが使えるため C++ の new/delete よりははるかに安全ですが.)

OS X v10.8 (Mountain Lion) になり,この Objective-C 2.0 ガベージコレクタ機能は非推奨になりました.iOSとの整合性を考えると,iOSにガベージコレクタを搭載するか,OS X から再びガベージコレクタを取り除くかですが,アップルは後者を選択しました.(プログラマから見るとやや驚きですよね.)

そのかわり,Xcode 4.2 からコンパイル時に retain/release を自動的に挿入する機能が付きました.アップルはこの技術を Automatic Reference Count (ARC) と呼んでいます.

ガベージコレクタを前提にしたコードは変更の必要は(原則として)ありません.一方,Objective-C 1.0 時代のコードはおそらく NSAutoreleasePool を多用していると思いますが,この NSAutoreleasePool はサポートされなくなったため,書き直しが必要です.(おそらくいちばん簡単なコード移行方法は,retain/release を削除してしまうことです.)

投稿者: (KAMAKURA & SAPPORO)Dr_Radialist

Expert Interventional Cardiologist and Amateur Computer Programmer

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です