2009-10-07 66 views
0

我正在檢查日程安排字典中的日期對象,並想知道完成日期指針後應如何處理。建立和分析不抱怨它,但它只是坐在那裏嘲笑我。我覺得它只是坐在那裏,當功能完成時,甚至每次通過循環創建一個新的。另外,每次通過循環釋放一天時,我最終會釋放原始對象。有任何想法嗎?這是什麼內存管理角度?

- (NSUInteger) showsInTheNext:(NSUInteger)days { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyyLLdd"]; 

    if(days == 0) days = 91; 
    NSUInteger shows = 0; 

    for (NSUInteger x = 0; x < days; x++) 
    { 
     Day *day = [self.schedule objectForKey:[dateFormatter stringFromDate:[self.date addTimeInterval:60*60*24*x]]]; 
     if((day != nil) && ([day.type isEqualToString:@"Show"])) shows++; 
     //[day release]; 
    } 

    [dateFormatter release]; 
    return shows; 
} 

回答

1

NSDictionary保留NSObject子類,當它被添加到NSDictionary。當您將其取回時,不會發送其他retain消息,因此您應該丟棄指針而不發送release消息。

如果對象是從字典移除,所述NSDictionary實施將發送release消息被刪除的對象。

您可以通過執行retainCount的調試級別的檢查,以確保它不會改變驗證這一點。

+0

好的,那麼我該如何去丟棄指針呢?我在想,當我製作這個新的指針時,可能指向的對象的保留計數會增加,因此當我最終從日程安排字典中將其刪除時,可能不會釋放它。 – rob5408 2009-10-07 21:26:57

+0

上面的指針只是一個指針 - 分配給它的對象沒有什麼特別的事情發生。所以在這種情況下,沒有保留消息被髮送到字典中找到的對象。要丟棄指針,只需按照您發佈的示例進行操作即可:無。 – fbrereto 2009-10-07 21:30:36

+0

woohoo!謝謝! – rob5408 2009-10-07 21:32:17

1

您只需從您的schedule字典中提取已存在的Day實例即可。除非您將其從字典中移除,否則在完成後不需要(也不應該)釋放它。在你的循環中無處是正在創建的Day的新實例。