6

NSDateFormatterのメモリリークに関する多くの質問/回答を見てきましたが、アプリでメモリリークの原因を特定するのに役立つものはないようです。これが私のコードです:

- (id)init
{
    if ((self = [super init])) 
    {
        items = [[NSMutableArray alloc] init];
        events = [[NSMutableArray alloc] init];
        buffer = [[NSMutableData alloc] init];
        format = [[NSDateFormatter alloc] init];
        lastFromDate = @"";
    }
    return self;
}

- (void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate
{ 
    [format setTimeZone:[NSTimeZone systemTimeZone]];
    [format setDateFormat:@"MM/dd/yyyy"];
    NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]];
    NSString *stringToDate = [NSString stringWithString:[format stringFromDate:toDate]];

    NSLog(@"From date: %@, To date: %@", stringFromDate, stringToDate); 

    [self didDatesChange:stringFromDate];

    if (dataReady) {
        [callback loadedDataSource:self];
        return;
    }
    callback = delegate;
    [self retrieveEventData:stringFromDate to:stringToDate];
}

- (void)dealloc
{
    [items release];
    [events release];
    [buffer release];
    [lastFromDate release];
    [format release];
    [super dealloc];
}

「プロファイル」->「リーク」を実行すると、関数がオンラインで呼び出されるたびにメモリリークが発生します

NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]];

誰かが何が起こっているのか説明できますか?ありがとう、マイク

4

2 に答える 2

2

日付から文字列を取得するために以下のメソッドを使用するだけで、正しく機能します......

-(NSString *)StringFromDate:(NSDate *)DateLocal{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MM/dd/yyyy"];
    NSString *dateString = [dateFormat stringFromDate:DateLocal];  
    NSLog(@"Date is HERE  =====>> %@",dateString);
    return dateString;
}

日付文字列を取得したい場合は、次のように使用してください。

NSString *stringFromDate = [self stringFromDate:fromDate]];
[stringfromdate retain];
NSString *stringToDate = [self stringFromDate:toDate]];
[stringTodate retain];

以上-(NSString *)StringFromDate:(NSDate *)DateLocalメソッドはviewcontroller.mファイルで定義する必要があります....正常に動作します...。

于 2012-04-21T09:01:19.693 に答える
2

参考までに、これを変更できます:

 NSString *stringFromDate = [NSString stringWithString:[format stringFromDate:fromDate]];

これに:

 NSString *stringFromDate = [format stringFromDate:fromDate];

ただし、 stringWithString は自動解放された NSString を返す必要があるため、それがリークの原因であるとは思いません。あなたのコードに漏れはないようです。

于 2012-04-20T21:57:26.013 に答える