1

我正在尝试测试我的 iphone 中的内存泄漏,但我没有太多运气摆脱这个。这是泄漏的代码。


- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate runSync:(BOOL)aRunSync {
    if (self = [super init]) {
        self.moc = aMoc;
        self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];
        self.delegate = aDelegate;
        calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        self.runSync = aRunSync;
    }

    return self;
}

self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];在线上泄漏。

self.settingManager 实例变量在类的 dealloc 方法中释放。

我不确定还有哪些其他信息是相关的。请告诉我,我可以提供。

感谢您的任何帮助。

-标记

这是头文件。


@interface VacaCalcCalculation : NSObject {
    NSManagedObjectContext *moc;
    VacaCalcSettingsManager *settingsManager;
    id delegate;
    NSCalendar *calendar;
    NSDate *nextBankLimitDate;
    BOOL runSync;
}

@property (nonatomic, retain) NSManagedObjectContext *moc;
@property (nonatomic, retain) VacaCalcSettingsManager *settingsManager;
@property (nonatomic, retain) id delegate;
@property (nonatomic, retain) NSCalendar *calendar;
@property (nonatomic, retain) NSDate *nextBankLimitDate;
@property (nonatomic) BOOL runSync;

- (id)initWithManagedObjectContext:(NSManagedObjectContext *)aMoc delegate:(id)aDelegate;
4

1 回答 1

7

如果您的settingsManager属性设置为,retain那么您将使用以下行保留一个对象两次:self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];

尝试在 VacaCalcSettingsManager 上添加autoreleasealloc]init创建一个返回自动释放对象的类方法。否则,您可以重新声明您的属性,assign以便它不会再次保留该对象。

于 2010-05-11T18:02:45.013 回答