「Object Ownership and Disposal」の編集履歴(バックアップ)一覧はこちら

Object Ownership and Disposal」(2010/02/03 (水) 21:48:04) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

//0.下はいじらない Tags:&tags() //1.以下に続けてADCでの分類を書き込みリンクする。「ガイド小見出し(日本語名)」、まで書く &link_toppage(トップ) > [[ガイド>Guides]] > パフォーマンス > Cocoaのメモリ管理プログラミングガイド > オブジェクトの所有権と廃棄 //前後のページへのリンクをはる。ページ最下部にも同じものがあるので忘れずにリンクする [[前のページ>Memory Management Rules]]  [[次のページ>]] //2.ガイド小見出しページ名(日本語名)を見出し1で書く。wiki内のリンクで用いられるタイトルになる。翻訳元にもリンクする。 *オブジェクトの所有権と廃棄 [[翻訳元>http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043]] //3.翻訳元の最終更新日を書く このページの最終更新:&date() ADCの最終更新:2009-10-21 //中見出しは下線を引く **オブジェクトの所有権についての方針(Object Ownership Policy) ----  Objective-Cプログラムでは、オブジェクトは絶え間なく生成され、廃棄されています。アプリケーションが必要以上にメモリを使わないことを確実にする為に、オブジェクトがそれ以上必要なくなった時に廃棄するのは重要なことです。オブジェクトはいつでも、専用のオブジェクトを生成し、必要な時に廃棄することができます。しかし、オブジェクトが他のオブジェクトにメッセージを送り、値を渡したとき、所有権の方針と、廃棄の義務が曖昧になってしまいます。例えば、たくさんのSprocketオブジェクトを持つThingamjigオブジェクトがあるとします。他のオブジェクトは、このオブジェクトに次のメソッドを使ってアクセスします。 #co(){オブジェクトはいつでも、専用のオブジェクトを生成し、必要な時に廃棄することができます。:Much of the time an object creates things for private use and can dispose of them as needed.わかりません...} |BGCOLOR(#eef): - (NSArray *)sprockets|  この宣言は誰も戻り値の配列を廃棄すべきでない、ということを示しています。しかし、Thingamajigオブジェクトがインスタンス変数を返すなら、その配列に対する責任がある、と考えるのは当然です。一方で、新しいThingamajigオブジェクトを生成した場合、その生成したオブジェクトを廃棄する責任が生じます。この説明の仕方は混乱のもとになります。「廃棄する」というのは一般に「捨てる」または「解放する」と言うのを意味します。 #co(){? しかし、Thingamajigオブジェクトがインスタンス変数を返すなら、その配列に対する 責任がある、と考えるのは当然です。一方で、新しいThingamajigオブジェクトを生成した場合、その生成したオブジェクトを廃棄する責任が生じます。この説明の仕方は混乱のもとになります。 It is reasonable to suggest, however, that if your Thingamajig object returns an instance variable, it is responsible for the array. If on the other hand you create a new Thingamajig object, then you are responsible for disposing of the new object. This, though, introduces a possible source of confusion. }  あるオブジェクトがオブジェクトを生成し、他のオブジェクトに渡すことは可能(実際には一般的)です。新しいオブジェクトは第三者が使い終わるまで捨てられないことが重要です。したがって、オブジェクトの所有権という観点からメモリ管理を考えるなら、どんなオブジェクトも一つ以上の所有者を持つことができる方が良いでしょう。オブジェクトは、最低一つのオブジェクトに所有されている限りは、存在し続けます。オブジェクトが誰にも所有されなくなったら、そのオブジェクトはランタイムが自動的に廃棄(解放)します。  いつオブジェクトを所有していつしないか、所有者として何の責任があるかを明確にする為に、Cocoaでは以下の方針を決めています。 - 生成したオブジェクトには所有権があります。&br()オブジェクトは名前が「alloc」か「new」で始まるメソッドか、「copy」を名前に含むメソッド(例えばalloc, newObject, mutableCopy等)を使って「生成」します。&br()他にもオブジェクトの所有権を得る方法があります。「Taking Ownership of Objects」で解説します。 - オブジェクトを所有しているのなら、使い終えた時に所有権を放棄する責任があります。&br()所有権はオブジェクトにreleaseメッセージかautoreleaseメッセージ(autoreleaseは「Delayed Release」で詳しく解説します)を送ることによって放棄します。Cocoaの命名規則では、所有権の放棄は一般的にオブジェクトをリリースすることを指します。 - 当然、所有していないオブジェクトの所有権を廃棄してはいけません。  この方針はGUIベースのCocoaアプリケーションとコマンドラインFoundationツールの両方に適用されます。  以下の例を考えてください。 |BGCOLOR(#eef):Thingamajig *myThingamajig = [[Thingamajig alloc] init];&br()// ...&br()NSArray *sprockets = [myThingamajig sprockets];&br()// ...&br()[myThingamajig release];|  この例は、この方針を適切に守っています。allocメソッドを使ってThingamajigオブジェクトを生成しているので、その後releaseメッセージをオブジェクトに送っています。sproketオブジェクトの配列をThingamajigオブジェクトから得たときは、配列を「生成した」訳ではないので、releaseメッセージは送りません。 **所有権の獲得(Taking Ownership of Objects) ---- **オブジェクトの解放(Deallocating an Object) ---- **リソース管理(Resource Management) ---- [[前のページ>Memory Management Rules]]  [[次のページ>]] ----
//0.下はいじらない Tags:&tags() //1.以下に続けてADCでの分類を書き込みリンクする。「ガイド小見出し(日本語名)」、まで書く &link_toppage(トップ) > [[ガイド>Guides]] > パフォーマンス > Cocoaのメモリ管理プログラミングガイド > オブジェクトの所有権と廃棄 //前後のページへのリンクをはる。ページ最下部にも同じものがあるので忘れずにリンクする [[前のページ>Memory Management Rules]]  [[次のページ>]] //2.ガイド小見出しページ名(日本語名)を見出し1で書く。wiki内のリンクで用いられるタイトルになる。翻訳元にもリンクする。 *オブジェクトの所有権と廃棄 [[翻訳元>http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043]] //3.翻訳元の最終更新日を書く このページの最終更新:&date() ADCの最終更新:2009-10-21 //中見出しは下線を引く **オブジェクトの所有権についての方針(Object Ownership Policy) ----  Objective-Cプログラムでは、オブジェクトは絶え間なく生成され、廃棄されています。アプリケーションが必要以上にメモリを使わないことを確実にする為に、オブジェクトがそれ以上必要なくなった時に廃棄するのは重要なことです。オブジェクトはいつでも、専用のオブジェクトを生成し、必要な時に廃棄することができます。しかし、オブジェクトが他のオブジェクトにメッセージを送り、値を渡したとき、所有権の方針と、廃棄の義務が曖昧になってしまいます。例えば、たくさんのSprocketオブジェクトを持つThingamjigオブジェクトがあるとします。他のオブジェクトは、このオブジェクトに次のメソッドを使ってアクセスします。 #co(){オブジェクトはいつでも、専用のオブジェクトを生成し、必要な時に廃棄することができます。:Much of the time an object creates things for private use and can dispose of them as needed.わかりません...} |BGCOLOR(#eef): - (NSArray *)sprockets|  この宣言は誰も戻り値の配列を廃棄すべきでない、ということを示しています。しかし、Thingamajigオブジェクトがインスタンス変数を返すなら、その配列に対する責任がある、と考えるのは当然です。一方で、新しいThingamajigオブジェクトを生成した場合、その生成したオブジェクトを廃棄する責任が生じます。この説明の仕方は混乱のもとになります。「廃棄する」というのは一般に「捨てる」または「解放する」と言うのを意味します。 #co(){? しかし、Thingamajigオブジェクトがインスタンス変数を返すなら、その配列に対する 責任がある、と考えるのは当然です。一方で、新しいThingamajigオブジェクトを生成した場合、その生成したオブジェクトを廃棄する責任が生じます。この説明の仕方は混乱のもとになります。 It is reasonable to suggest, however, that if your Thingamajig object returns an instance variable, it is responsible for the array. If on the other hand you create a new Thingamajig object, then you are responsible for disposing of the new object. This, though, introduces a possible source of confusion. }  あるオブジェクトがオブジェクトを生成し、他のオブジェクトに渡すことは可能(実際には一般的)です。新しいオブジェクトは第三者が使い終わるまで捨てられないことが重要です。したがって、オブジェクトの所有権という観点からメモリ管理を考えるなら、どんなオブジェクトも一つ以上の所有者を持つことができる方が良いでしょう。オブジェクトは、最低一つのオブジェクトに所有されている限りは、存在し続けます。オブジェクトが誰にも所有されなくなったら、そのオブジェクトはランタイムが自動的に廃棄(解放)します。  いつオブジェクトを所有していつしないか、所有者として何の責任があるかを明確にする為に、Cocoaでは以下の方針を決めています。 - 生成したオブジェクトには所有権があります。&br()オブジェクトは名前が「alloc」か「new」で始まるメソッドか、「copy」を名前に含むメソッド(例えばalloc, newObject, mutableCopy等)を使って「生成」します。&br()他にもオブジェクトの所有権を得る方法があります。「Taking Ownership of Objects」で解説します。 - オブジェクトを所有しているのなら、使い終えた時に所有権を放棄する責任があります。&br()所有権はオブジェクトにreleaseメッセージかautoreleaseメッセージ(autoreleaseは「Delayed Release」で詳しく解説します)を送ることによって放棄します。Cocoaの命名規則では、所有権の放棄は一般的にオブジェクトをリリースすることを指します。 - 当然、所有していないオブジェクトの所有権を廃棄してはいけません。  この方針はGUIベースのCocoaアプリケーションとコマンドラインFoundationツールの両方に適用されます。  以下の例を考えてください。 |BGCOLOR(#eef):Thingamajig *myThingamajig = [[Thingamajig alloc] init];&br()// ...&br()NSArray *sprockets = [myThingamajig sprockets];&br()// ...&br()[myThingamajig release];|  この例は、この方針を適切に守っています。allocメソッドを使ってThingamajigオブジェクトを生成しているので、その後releaseメッセージをオブジェクトに送っています。sproketオブジェクトの配列をThingamajigオブジェクトから得たときは、配列を「生成した」訳ではないので、releaseメッセージは送りません。 **所有権の獲得(Taking Ownership of Objects) ---- **オブジェクトの解放(Deallocating an Object) ---- **リソース管理(Resource Management) ---- [[前のページ>Memory Management Rules]]  [[次のページ>]] ----

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー