2012-04-20 28 views
6

Tôi đã thấy nhiều câu hỏi/câu trả lời về rò rỉ bộ nhớ trong NSDateFormatter, nhưng dường như không có gì giúp tôi xác định điều gì khiến bộ nhớ bị rò rỉ trong ứng dụng của tôi. Đây là mã của tôi:Rò rỉ bộ nhớ trong khi sử dụng 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]; 
} 

Khi tôi chạy "hồ sơ" -> "Rò rỉ", tôi nhận được một rò rỉ bộ nhớ mỗi khi hàm được gọi trên đường dây

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

Ai đó có thể giải thích những gì có thể đang xảy ra? cảm ơn, mike

+1

xin vui lòng gửi didDatesChange: và retrieveEventDa ta: to :. vì không có rò rỉ rõ ràng trong mã trong câu hỏi của bạn, tôi đoán là một sự mất cân bằng giữ lại bên trong một trong những phương pháp đó. – danh

+1

tại sao Công cụ sẽ chỉ cho tôi đến dòng nơi NSDate được định dạng nếu rò rỉ ở một trong hai chức năng đó? –

Trả lời

2

FYI bạn có thể thay đổi điều này:

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

này:

NSString *stringFromDate = [format stringFromDate:fromDate]; 

stringWithString nên trả lại một NSString autoreleased mặc dù vậy tôi không tin đó là nguồn gốc của bạn rò rỉ. Có vẻ như không có mã rò rỉ trong mã của bạn với tôi.

2

bạn chỉ cần sử dụng phương pháp dưới đây để get chuỗi kể từ ngày công việc của mình đúng ......

-(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; 
} 

sau khi bạn muốn để có được chuỗi ngày chỉ cần sử dụng như dưới đây ....

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

trở lên - (NSString *) StringFromDate: (NSDate *) phương pháp DateLocal là phải được xác định trong tập tin viewcontroller.m của bạn .... công việc của nó tốt ....

+1

bạn cần phải giải phóng NSDateFormatter bạn phân bổ trong phương thức. –

+0

vâng tôi biết nhưng bây giờ tôi chỉ xác định mã đó là hữu ích cho người dùng với vấn đề của nó, tôi sử dụng dateFormat globaly trong ứng dụng của tôi ..... mặc dù Thanx ... :-) –

+1

Tôi có NSDateFormatter được xác định trên toàn cầu, bởi vì tôi don không muốn tạo một cái mới mỗi lần chức năng này được gọi. Điều này sẽ tái tạo nó mỗi lần, đúng không? Có lợi thế/bất lợi nào không? –