Похоже, я не понимал управления памятью в Objective C ... sigh.Управление памятью в iOS/ManagedObjectContext
У меня есть следующий код (обратите внимание, что в моем случае, 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
в отмеченном месте коды, инструменты находит утечку памяти там. Если я это сделаю, программа выйдет из строя, как только я попытаюсь получить доступ к item.place
за пределами метода оскорбления.
Любые идеи?
Было бы полезно вставить объявление свойства 'place', а также определение его метода setter (если оно есть). –
Вы имеете в виду, что сгенерировали ваши геттеры/сеттеры с помощью '@ synhesize'? –
Я использовал @dynamic, поскольку я понял, что это правильно для свойств, привязанных к ManagedObjectContext, как в моем случае – Axel