【发布时间】:2011-09-01 10:03:45
【问题描述】:
任何人都可以帮助重新定义此代码的泄漏对象的来源:
我的应用程序编译时没有任何 ANALYZE 问题。当我运行 PROFILER 并查看 Memory Leaks 时,我看到出现了泄漏。其中一个泄漏在我的 WeekendEvent 对象中。下面的仪器中有 3 个 Leaked Block 行项(我在代码中指出了这些项):
- 马洛克+1
- 保留+2
- 释放+1
问题 - 我认为这意味着有一个版本,但是这个泄漏是从哪里来的。我的代码中点击工具突出显示的部分如下。对我来说,这似乎还不错:
- 我创建的 WeekendEvent 在传递到 addWeekendEvent 方法后释放
- 在 addWeekendEvent 中,它只是将其添加到 NSMutableArray,因此我认为该安排对其包含的对象进行任何内存管理
- 我也确实在 dealloc 中释放了 NSMutableArray
关键源代码位和仪器亮点
// ------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
编辑 2 - 确认一下,它是 Instruments 在其“泄漏对象”列中突出显示的“WeekendEvent”实例。以防万一这不清楚。
EDIT 3 - 关于我如何设置 items 变量 - 关键代码位是:
@interface Weekends : NSObject {
NSMutableArray* _items;
}
@property (nonatomic, retain) NSMutableArray* items;
@synthesize items = _items;
- (void) dealloc {
[_items release];
[super dealloc];
}
【问题讨论】:
标签: iphone objective-c memory-management memory-leaks instruments