2010-05-11 41 views
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方法中發佈。

我不確定什麼其他信息將是相關的。請讓我知道,我可以提供。

感謝您的任何幫助。

-Mark

這是頭文件。


@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; 
+0

不是iPhone的開發者,所以這是我對系統工作方式缺乏瞭解,但它看起來像日曆只是設置了一個新的值,並沒有做任何事情。那裏可能有什麼? – Jay 2010-05-11 18:02:06

+0

顯示頭文件對實例變量的聲明。 – 2010-05-11 18:20:40

回答

7

如果您settingsManager屬性設置爲retain,那麼你與線兩次固定的對象:self.settingsManager = [[VacaCalcSettingsManager alloc] initWithManagedObjectContext:self.moc];

嘗試增加autoreleasealloc]init或創建上VacaCalcSettingsManager類方法返回一個自動釋放的對象。否則,您可以用assign重新聲明您的財產,以便它不會再保留該對象。

+0

或直接分配給settingsManager而不是調用[self setSettingsManager:] – drawnonward 2010-05-11 18:10:39