2
-(NSDate *)dateFromDate:(NSDate *)inDate withNewTime:(NSDateComponents *)inTimeComponents {

NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *newComponents = [self.sysCalendar components:unitFlags fromDate:inDate];
[newComponents setHour:[inTimeComponents hour]];
[newComponents setMinute:[inTimeComponents minute]];
return [self.sysCalendar dateFromComponents:newComponents];

}

なぜこれが漏れるのか理解できません。これは自動解放されたオブジェクトを返しませんか? 意図したとおりに動作しますが、計測器で実行すると、日付オブジェクトがリークしているように見え、スタックはそれがここで作成されたことを示しています。

sysCalendar は、次の getter を持つプロパティです。

-(NSCalendar *)sysCalendar {
if (sysCalendar != nil) {
    return sysCalendar;
}

self.sysCalendar = [NSCalendar currentCalendar];
return sysCalendar;

}

4

2 に答える 2

1

Instruments がリークが発生した場所を表示する場合、実際にはリークしたオブジェクトが作成された場所を示しています。

この場合、ここで作成されたオブジェクトが他の場所で適切にリリースされていないようです。

于 2011-07-05T23:10:21.113 に答える
1

明確にするために、NSDateComponentsオブジェクトではなく、NSDateオブジェクトがリークしていると言っていますよね?

そのため、Leaks は通常、この return ステートメントでここで作成された日付をリリースするのを忘れた可能性がある場所を通知できません。これが作成された場所であることを伝えているだけです。

したがって、このメソッドから取得した後、この新しい NSDate で何を行うかを確認してください。

于 2011-07-05T23:11:57.120 に答える