gpt4 book ai didi

iphone - App 在 Instrument 中显示泄漏,这个简单的代码有什么问题?

转载 作者:行者123 更新时间:2023-11-28 23:10:37 27 4
gpt4 key购买 nike

我很简单地将我的数据导出到 CSV 文件中。但是当我点击导出按钮时,Leak Instrument 显示 [NSPlaceholderMutableString init] 错误。

我没有在我的 NSMutableString 中的任何地方使用 Placeholder,那么 Instrument 显示 Leak 是怎么回事。

这是我的代码:

- (IBAction)btnExportDataPressed:(id)sender
{
csvString = [[NSMutableString alloc] init];
csvString = [NSMutableString stringWithFormat:@"No.,Name,Type,MaskPAN,SwipeTime\n"];
NSString *msg = @"";

if (self.totalCards.count>0)
{
for (int i=0; i<self.totalCards.count; i++)
{
self.cardInfo = [self.totalCards objectAtIndex:i];
[csvString appendString:[NSMutableString stringWithFormat:@"%d,%@ %@,%@,%@,%@\n",i+1,self.cardInfo.firstName,self.cardInfo.lastName,self.cardInfo.type,self.cardInfo.maskedPAN,self.cardInfo.swipeTime]];
}
NSLog(@"csvString:%@",csvString);

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"ORANGE_BOWL_%@",[NSDate date]];

NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.csv",fileName]];
[fileManager createFileAtPath:fullPath contents:[csvString dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
msg = @"Data exported successfully. Connect the device to iTunes to get the records.";
}
else
{
msg = @"No Data to Export";
}

[csvString release];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Discover Orange Bowl," message:msg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}

下面是仪器的错误图片

enter image description here

最佳答案

您的代码顶部存在内存泄漏:

csvString = [[NSMutableString alloc] init];
csvString = [NSMutableString stringWithFormat:@"No.,Name,Type,MaskPAN,SwipeTime\n"];

因此,您正在为一个可变字符串(第 1 行)分配内存,这会使保留计数增加 1,然后在第 2 行中,您丢失了指向它的指针引用,因为您将另一个字符串分配给了该指针。这肯定会泄漏内存;不确定您的其余代码是否在做其他不好的事情。

所以删除第一行——它没有用,只会导致内存泄漏。

此外,您的 [csvString release] 行看起来不对,因为当您上次将某些内容分配给 csvstring 时,您使用了 [NSMutableString stringWithFormat] 而它不会不要增加保留计数(因此您不应该使用 release 来减少它)。因此,请尝试删除显示 [csvString release]; 的行。

Leaks 工具可以显示对您实际上没有使用的对象的稍微令人费解的引用;这是由于这些对象被您使用过的对象在内部使用(和泄漏)造成的。

关于iphone - App 在 Instrument 中显示泄漏,这个简单的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com