2011-09-11 20 views
0

私のアプリでは私のhファイルにいくつかの属性を定義しています。公開する属性と公開しない属性は何ですか?

私が理解する限り、mファイルのどこかで "alloc"を取得する属性がある場合は、deallocメソッドで解放する必要があります。

私は「ALLOC」を取得しない属性については明確ではないよ:

  • NSStringの - 私は「ノー」と言う「はい」と言う記事と記事を読んで(それらを解放すべきです)
  • NSDictionary/NSArray - 私がそれらを作成するとき、私は "alloc"を使用しませんが、いくつかのarrayWithまたはdictionaryWithメソッドを使用します。リリースを必要とするメモリ割り当てを取得するのか、またはXCodeがデータ管理を担当していると仮定できますか?
  • BOOL - ちょうど私が彼らに
  • int型を解放する必要がないことを確認したい - ちょうど私が彼らにUIButtonのよう
  • UI項目を(解放する必要がないことを確認したいです、UILabelなど) - これらのアイテムはIBで接続されていますが、コード内から「alloc」を持っていません - IBがそれらを解放しているのですか、それとも自分でやろうとしていますか?
  • アトリビュートプロパティはどのようにメモリ管理要件に影響しますか? copy/retain/assign/nonatomic(私は "copy"を行うと別のコピーを作成しているため、より多くのメモリが割り当てられることを理解していますが、コピーされたpropertyied属性を解放し、場合によってはコピーしない例コードがあります)

私は別のチュートリアルを読んでも大丈夫です(ほとんどの場合、メモリ管理に関する質問をするとAppleのメモリ管理ガイドへのリンクが送られてきます)が、誰かがそれを説明できる、アップルが提供するものよりも、より鮮明なチュートリアルになるように私は非常に感謝しています。

答えて

1

@"some string"は、autoreleasedです。これらについては心配しないでください。 viewController.title = @"some string";のようにオブジェクトに渡すと、その文字列は他のオブジェクトによって保持され、管理されます。

NSSet秒、NSArray秒、またはNSDictionary秒を作成する方法は2通りあります。
allocinitを使用し、後でreleaseにするか、autoreleasedオブジェクトを返す+arrayWith...メソッドを使用できます。

BOOLintなどのプリミティブデータ型については心配しないでください。値をretain

プロパティは、基本的に、彼らは再びそれをreleaseまで、オブジェクトがメモリ内に留まることを確認して、強いプロパティです。どんな種類のオブジェクトでもほとんどretainを使用しますが、retain cyclesに注意してください!

1

あなたはメモリ管理チュートリアルを読んでいると言っているので、この質問には多くの回答がありますが、あなたが探しているのはあなたの頭の中で明確にするための素晴らしい例です。

私が読んだCocoaのメモリ管理に関する最も役に立つ説明は、Hillegassの本(Mac OS X用のCocoa Programming)で、オブジェクトを犬のように記述したものです。保持カウントを増やす方法の1つを使用するたびに(忘れてしまったことがいくつかあります)、あなたは別のものを置いています犬の首の上につなぐ

私は今この完璧に優れたメタファーを愚かな極端にするつもりです。あなたは鮮明な例を求めました!

  • あなたは、あなたがそれで行われたら、あなたのは犬をオフにつながるのいずれかを取る必要があります。さもなければナショナル・ランプーンズ・バケーションのように車に縛られて車で追い払うでしょう。これはいいものではありません。これはのメモリリークです。

  • 犬の鉛を持たない場合は、その犬にトリックをしたいときにその犬がそこにいることを保証することはできません。これは、で、リリースされたオブジェクトにメッセージを送信することができます。

  • あなたが犬を離れてあなたのリードを取るために行く、そしてそれにはリード線が存在しない場合には、犬は、オーバー解放それあなたあなたとして恐ろしく凶暴でした。

したがって、本質的に、犬にリードをつけたら、それを外さなければなりません。あなたがいない場合(つまり、newまたはretainなどと呼ばれていない場合)、あなたはそうしません。これはすべてのオブジェクトに適用されます。 BOOLintはオブジェクトではないので、心配する必要はありません。

んが、犬は一日プログラミング活動

に私の一日の間に損をしています
関連する問題