高速列挙で引数を解放しますか? したがって、このコードは正確でしょうか:
for (MKCircle *circle in localOverlays) {
[mapView addOverlay: circle];
[circle release]; // Is it perfectly alright to call this?
}
高速列挙を初めて使用するのは不思議です。
高速列挙で引数を解放しますか? したがって、このコードは正確でしょうか:
for (MKCircle *circle in localOverlays) {
[mapView addOverlay: circle];
[circle release]; // Is it perfectly alright to call this?
}
高速列挙を初めて使用するのは不思議です。
答えはApple Memory Management Rulesにあります。
あなたが作成したオブジェクトはあなたが所有します
名前が「alloc」、「new」、「copy」、または「mutableCopy」で始まるメソッドを使用してオブジェクトを作成する</p>
作成しましたcircle
か? いいえ。
保持を使用してオブジェクトの所有権を取得できます
維持しましたcircle
か?いいえ。
したがって、あなたはオブジェクトを所有していません。
自分が所有していないオブジェクトの所有権を放棄してはなりません
を所有していないと判断したので、これはかなり簡単に思えますcircle
。あなたの質問のコード例のリリースはそこにあるべきではありません。実際、ほとんどの場合、どこかでクラッシュが発生する可能性があります。
通常、高速列挙は新しいオブジェクトを作成せず、既存のオブジェクトを通過します。NSArray
通常のコンテナー ( 、NSSet
、 )の高速な列挙は、NSDictionary
オブジェクトをループで使用できるようにする前にオブジェクトを保持しないため、オブジェクトを解放するとエラーになります。メソッド内であってdealloc
も、そうすべきではありません。コンテナを解放すると、そのアイテムも解放されるため、個別に解放するべきではありません。
いいえ、それは正しいことではないと思います。インスタンスに対してaretain
も aも実行しませんrelease
for (MKCircle *circle in localOverlays) {
[mapView addOverlay: circle]; //retain here
}
addOverley: を保持する必要があり、mapView がそれを必要としない場合はcircle
mapView の責任ですrelease
簡単なガイド、あなたretain
、そしてrelease
それを使い終わったらそれ