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その場合、問題のあるメソッドの外部にアクセスしようとするとすぐにプログラムがクラッシュします。
何か案は?