Любой, кто в состоянии помочь, является источником объекта с утечкой для этого кода:
Мое приложение компилируется без каких-либо проблем с АНАЛИЗОМ. Когда я запускаю PROFILER и смотрю на утечки памяти, я вижу, что утечки появляются. Одна из этих утечек находится в моем объекте WeekendEvent. В инструментах есть 3 элемента строки «Утечка блока», указанные ниже (я отметил в коде, на который они указывают):
- Маллок + 1
- Сохранить + 2
- Релиз + 1
Вопрос - Я предполагаю, что это подразумевает, что существует утечка, однако, откуда будет эта утечка. Сегменты моего кода, по которым кликают инструменты, выделены ниже. Мне кажется, что все в порядке:
- созданное мной WeekendEvent, которое я выпускаю после перехода в метод addWeekendEvent
- в addWeekendEvent он просто добавляет его в NSMutableArray, и поэтому я подумал, что компоновка выполняет какое-либо управление памятью для своего объекта, который он содержит
- Я тоже освобождаю NSMutableArray в dealloc
Ключевые биты исходного кода и основные характеристики
// ------Weekends Method (plural)-----
WeekendEvent *weEvent = [[WeekendEvent alloc] init]; // [INSTRUMENTS - 87.5%]
[week addWeekendEvent:weEvent]; // [INSTRUMENTS - 12.5%]
[weEvent release];
//------Weekend *.h ------------
@interface Weekend : NSObject {
NSMutableArray* _events;
}
- (void)addWeekendEvent:(WeekendEvent*)weEvent;
@property (nonatomic, retain) NSMutableArray* events;
@end
//------Weekend *.m -------------
- (void)addWeekendEvent:(WeekendEvent*)weEvent {
[self.events addObject:weEvent];
}
- (void) dealloc {
[_events release];
[super dealloc];
}
РЕДАКТИРОВАТЬ : некоторый дополнительный код о том, как создавалась / использовалась переменная "week", указанная выше, поэтому в методе выходных код, который я разместил, был внутри цикла for - код с циклом for, показанным поэтому было:
for (Weekend *week in self.items) {
// do pass "week.start" to some methods (which is an NSDate) - don't think this would be relevant though?
WeekendEvent *weEvent = [[WeekendEvent alloc] init]; // [INSTRUMENTS - 87.5%]
[week addWeekendEvent:weEvent]; // [INSTRUMENTS - 12.5%]
[weEvent release];
}
// Note - self.items I checked is "released" in the dealloc method
EDIT 2 - просто чтобы подтвердить, это экземпляр "WeekendEvent", который Instruments выделяет в столбце "объекты утечки". На всякий случай, это неясно.
РЕДАКТИРОВАТЬ 3 - Как настроить переменную элементов - биты кода клавиши:
@interface Weekends : NSObject {
NSMutableArray* _items;
}
@property (nonatomic, retain) NSMutableArray* items;
@synthesize items = _items;
- (void) dealloc {
[_items release];
[super dealloc];
}