Objective C のメモリ管理を理解していなかったようです... ため息。
私は次のコードを持っています(私の場合、両方とも有効なデータで満たされていることに注意してくださいplacemark.thoroughfare
。placemark.subThoroughfare
したがって、両方のif
条件はTRUE
item
に結び付けられていManagedObjectContext
ます。item
などの管理変数には、 でplace
作成されたセッター/ゲッターがあり@dynamic
ます。したがって、宣言は
@property (nonatomic, retain) NSString *place;
@dynamic place;
コードの後半、ReverseGeocoderDelegate でアクセスします。
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
if (placemark.thoroughfare) {
[item.place release];
item.place = [NSString stringWithFormat:@"%@ ", placemark.thoroughfare];
} else {
[item.place release];
item.place = @"Unknown Place";
}
if (placemark.thoroughfare && placemark.subThoroughfare) {
// *** problem is here ***
[item.place release];
item.place = [NSString stringWithFormat:@"%@ %@", placemark.thoroughfare , placemark.subThoroughfare];
}
コード内のマークされた場所で解放しないとitem.place
、Instruments はそこでメモリ リークを検出します。item.place
その場合、問題のあるメソッドの外部にアクセスしようとするとすぐにプログラムがクラッシュします。
何か案は?