看起来我不了解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
在违规方法之外访问,程序就会崩溃。
有任何想法吗?