私が開発に新しいですし、これを把握することはできません。なぜこのコードは漏れていませんか?
for(NSString *collectionName in jsonObjects)
{
NSDictionary *collection = [[NSDictionary alloc] init];
collection = [jsonObjects valueForKey:collectionName];
NSArray *items = [[NSArray alloc] initWithArray:[collection valueForKey:@"items"]];
NSNumber *lastAccess = [[NSNumber alloc] init];
lastAccess = [collection valueForKey:@"lastAccess"];
[items release];
}
それは、なぜ私がlastAccessかのいずれかのコレクションを解放行うと、プログラムはEXC_BAD_ACCESSエラーでクラッシュすることを、理解していません...しかし、もし私がDONTをリリースした場合私はリークを取得します。誰もがこれに光を当ててください。私はあなたがallocを使用した場合、あなたは参照を所有していたので、解放しなければならないと思いましたか?
ハーラルさん、メモリ管理ガイドを見てきましたが、間違っていると思います。私の最初のalloc/initを上書きすることについては何を言っているのですか?しかし、NSDictionary *コレクション= [jsonObjects valueForKey:collectionName];とNSDictionary *コレクション= [NSDictionary dictionaryWithDictionary:[jsonObjects valueForKey :collectionName]];つまり、これらの2つの宣言が機能的に同等であるかどうか、ドキュメントでは明確になりませんか? – Beliskna
はい、いいえ、2つの呼び出しのどちらも所有しているものへの参照を返しません'alloc'または 'new'または 'copy'ですが、最初のものは新しい辞書を作成します。 dは与えられた辞書の値で初期化します(これはコンビニエンスコンストラクタと呼ばれます)。2番目のものは対応する辞書を返します。 [NSDictionary dictionaryWithDictionary:...]は[[NSDictionary alloc] initWithDictionary:...]より_different_です。2番目の_does_は、所有するオブジェクトを作成します –
ありがとうHarald、あなたはとても役に立ちました。 – Beliskna