2011-02-01 18 views
0

こんにちはみんな(私の英語はすみません)。私はobjetive-CとiOSプログラミングの新機能です。あなたは私を助けることができます?iOSのメモリ管理

@interface RootViewController : UITableViewController 
{ 
    NSMutableArray *keysFromQuery; 
} 

@property (nonatomic, retain) NSMutableArray *keysFromQuery; 
.... 
.... 
NSString *category = [keysFromQuery objectAtIndex:0]; 

[keysFromQuery objectAtIndex:0]とどうなる私は何場合:[カテゴリリリース];?

それ以降にカテゴリを作成するとどうなりますか?[keysFromQuery release];

リファレンスとメモリの仕組みがよくわかりません。

ありがとうございます!

答えて

3

-releasecategoryに電話しないでください。あなたはそのオブジェクトを所有していません。 NARC(new/alloc/retain/copy)を使用して所有権を取得したオブジェクトのみをリリースする必要があります。詳細はMemory Management Programming Guideをご覧ください。

0

オブジェクトを返したメソッドが、 "new"、 "retain" ed、 "alloc" ed、 "created"または "copy"対象オブジェクトを返すことを明示的に述べていない場合は、 。それは簡単です。

だからリリースを行う(またはautoreleaseの)のみ

[object retain]; 
[object copy]; 
[SomeClass newInstanceWithProperty: @"a"]; 
[[SomeClass alloc] initWithProperty: @"a"]; 

などこの場合はそう

ような場合のために、あなたは何もする必要はありませんし、あなたが希望言及「リリース」おそらくアプリをクラッシュさせます。

+0

[keysFromQuery release]の後に、コンテナ(カテゴリ文字列)から取得したオブジェクト参照が無効になります。 –

0

[keysFromQuery objectAtIndex:0]を実行するとどうなりますか?[カテゴリリリース]; これは自動リリースされたオブジェクトなので、これを行うべきではありません。

それ以降にカテゴリを作成するとどうなりますか?[keysFromQuery release]; 初期化後にkeysFromQueryを解放すると、NSStringは保存されます。

0

オブジェクトを所有していないので、オブジェクトを解放しないでください。