Vous ne devez pas vous libérer components
du tout comme il est mis à AutoRelease par l'objet NSCalendar
.
Je soupçonne que votre fuite provient de votre objet NSDate
que vous passez à cette ligne de code. Vous devriez probablement assignons à une variable locale, passer à la méthode [cal components]
puis relâchez la variable locale:
NSDate *today = [[NSDate alloc] init];
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
fromDate:today];
[today release];
Ou, définir l'objet NSDate
lui-même à AutoRelease que vous passez comme vous le faites, utilisation [NSDate date]
, qui, comme David Gelhar a commenté va générer un objet autoreleased, comme ceci:
NSDateComponents *components = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
fromDate:[NSDate date]];
Tout à fait; le '[NSDate alloc]' provoque une fuite. Notez qu'au lieu d'utiliser un temp et de le relâcher, vous pouvez également utiliser '[NSDate date]' pour obtenir un objet 'NSDate' autoreleased. –