0
NSDate *today = [[NSDate alloc] init];
    NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *onset = [[NSDateComponents alloc] init];
    [onset setMonth:monthsStart];
    NSDate *fromDate = [gregorian dateByAddingComponents:onset toDate:today options:0];
    [onset setMonth:monthsEnd];
    NSDate *toDate = [gregorian dateByAddingComponents:onset toDate:today options:0];

それは次のように言います:-

  1. メソッドは、保持カウントが +1 の Objective-C オブジェクトを返します
  2. オブジェクトがリークしました: 割り当てられて格納されたオブジェクトtodayは、この実行パスで後で参照されず、保持カウントが +1 です
4

1 に答える 1

0

リークは、リリースしていないためですtoday。同じものを使用[today release]して解放してください。calenderとも同様ですonset。行の直後に、NSDate *toDate = [gregorian dateByAddingComponents:onset toDate:today options:0];これらのパラメーターをすべて解放してください。

NSDate *today = [[NSDate alloc] init];
NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *onset = [[NSDateComponents alloc] init];
[onset setMonth:monthsStart];
NSDate *fromDate = [gregorian dateByAddingComponents:onset toDate:today options:0];
[onset setMonth:monthsEnd];
NSDate *toDate = [gregorian dateByAddingComponents:onset toDate:today options:0];
//After you are done with the below variables, you can release it
[today release];
[calender release];
[onset release]; //you cannot use these variables after this line.

また、このドキュメント、Advanced Memory Management Programming Guideも参照してください。

于 2012-11-29T08:03:31.507 に答える