2011-04-09 68 views
2

我有一個視圖控制器,離開堆棧後,泄漏儀器顯示內存泄漏。在閱讀了大量有關the NSDateFormatter bug的帖子,並執行了setDateFormat 'Z' workaround之後,我仍然在泄漏內存(根據Instruments)。iOS:NSDateFormatter內存泄漏/ viewDidUnload

在我的頭:

NSDateFormatter *dfm; 
... 
@property (nonatomic, retain) NSDateFormatter *dfm; 

我在執行:

@synthesize dfm; 
... 
- (void) viewDidLoad { 
    [super viewDidLoad]; 
    dfm = [[NSDateFormatter alloc] init]; 
    [self.dfm setDateFormat:@"h:mma Z"]; // leaks with & without this line 
} 
... 
- (void)viewDidUnload { 
    //SOLUTION: This method was never being called. Needed to use dealloc, per the answer below. 
    [dfm release]; 
    self.dfm = nil; 
    [super viewDidUnload]; 
} 

任何立場不正確的?我在這個類中唯一使用dfm的地方是在幾個地方調用stringFromDate來返回使用UILabels的自釋放字符串。

在此先感謝。

+0

確實 - 所以我學到了=)。我已經添加了'viewDidUnload'問題標題,以便人們在遇到此問題時可能會發現此帖。 – Chazbot 2011-04-10 16:42:49

回答

5

您不能依靠viewDidUnload進行調用。您還需要:

- (void)dealloc { 
    self.dfm = nil; 
    // whatever else you need 
    [super dealloc]; 
} 

你只需要self.dfm = nil因爲默認的合成setter方法做的釋放。

+0

我只是試圖補充說,儘管它沒有解決泄漏問題。我已經在我的viewDidUnload中設置了'self.dfm = nil',所以在dealloc中不再調用它是多餘的? thx爲快速反應。編輯:錯過了你的第一行=)。不幸的是,它仍然泄漏... – Chazbot 2011-04-09 22:12:39

+0

啊!在XCode中清理我的項目並進行更多測試之後,確實存在這個問題:viewDidUnload未被調用。非常感謝。 – Chazbot 2011-04-09 22:38:11