0

指定された日付の最初の平日を返す小さなメソッドがあります。

- (NSDate*) getFirstDayOfTheWeekFor:(NSDate*)date {

NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDayDate; //This is 100.0% leaking acc. to the Performance Tool Leaks

unsigned yearAndWeek = NSYearCalendarUnit | NSWeekCalendarUnit;

// retrieve the components from the current date
NSDateComponents *compsCurrentDate = [[gregorianCalender components:yearAndWeek fromDate:date] autorelease];

[compsCurrentDate setWeekday:2]; // Monday
[compsCurrentDate setHour:0];
[compsCurrentDate setMinute:0];
[compsCurrentDate setSecond:0];

// make a date from the modfied components
firstDayDate = [[gregorianCalender dateFromComponents:compsCurrentDate] autorelease];   

return firstDayDate;
}

ご覧のとおり、私はすでにここで使用されているすべての変数を自動解放しようとしています(これは、リークの追跡を開始する前の状態ではありません)。もともと私は、戻りのために自動解放されなければならない「firstDayDate」変数を除いて、戻りの前にすべての変数を明示的に解放したかったのです。

これらは、パフォーマンスツールによって検出されたリークオブジェクトです。

  • icu :: GregorianCalendar(1.00 KB)
  • icu :: SimpleTimeZone(112バイト)
  • __NSDate(16バイト)
  • icu :: NSNumberingSystem(128バイト)
  • __NSCFCalendar(48バイト)

間違いは完全に愚かなことであるに違いありませんが、私はそれを見つけることができません。手伝って頂けますか?ありがとうございました!!

4

1 に答える 1

0

次のようになります。

- (NSDate*) getFirstDayOfTheWeekFor:(NSDate*)date
{
    NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDate *firstDayDate; //This is 100.0% leaking acc. to the Performance Tool Leaks

    unsigned yearAndWeek = NSYearCalendarUnit | NSWeekCalendarUnit;

    // retrieve the components from the current date
    NSDateComponents *compsCurrentDate = [gregorianCalender components:yearAndWeek fromDate:date];

    [compsCurrentDate setWeekday:2]; // Monday
    [compsCurrentDate setHour:0];
    [compsCurrentDate setMinute:0];
    [compsCurrentDate setSecond:0];

    // make a date from the modfied components
    firstDayDate = [gregorianCalender dateFromComponents:compsCurrentDate];

    return firstDayDate;
}

firstDayDateがリークしている場合、それはこのメソッドにはありません。下流を確認してください。また、icuの部分は私には少し怪しいように見えます。これは、icuライブラリのiOSラッパーのバグ/リークである可能性があります。

あなただけを覚えているreleaseautorelease、あなたがalloc, init、またはcopy

于 2011-04-01T19:12:28.970 に答える