gpt4 book ai didi

ios - 仪器说我有12个内存泄漏,如何消除它们?

转载 作者:行者123 更新时间:2023-12-01 17:46:03 25 4
gpt4 key购买 nike

老实说,我无法弄清楚何时释放这些对象。谁能指导我正确的方向?

+ (DrawData*) load {
DrawData *newDrawData = [[DrawData alloc] init];

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSFileManager *fm = [NSFileManager defaultManager];

BOOL keepLoading = YES;
int curIndex = 0;

while ( keepLoading ) {

BoardData *tmpBoard = [[BoardData alloc] init];

NSString *imageFilename = [[NSString alloc] initWithFormat:@"iCanvas_image_%d.png", curIndex];
NSString *metadataFilename = [[NSString alloc] initWithFormat:@"iCanvas_metadata_%d.txt", curIndex];
NSString *layersFilename = [[NSString alloc] initWithFormat:@"iCanvas_layers_%d.dat", curIndex];

imageFilename = [documentsDirectory stringByAppendingPathComponent:imageFilename];
metadataFilename = [documentsDirectory stringByAppendingPathComponent:metadataFilename];

if ( [fm fileExistsAtPath:imageFilename] && [fm fileExistsAtPath:metadataFilename] ) {

NSString *metadataFile = [[NSString alloc] initWithContentsOfFile:metadataFilename];
NSArray *metadata = [metadataFile componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
tmpBoard.drawImageTypeOverlay = [[metadata objectAtIndex:0] intValue];
tmpBoard.brushSize = [[metadata objectAtIndex:1] floatValue];
tmpBoard.brushColorRed = [[metadata objectAtIndex:2] floatValue];
tmpBoard.brushColorGreen = [[metadata objectAtIndex:3] floatValue];
tmpBoard.brushColorBlue = [[metadata objectAtIndex:4] floatValue];
tmpBoard.brushColorAlpha = [[metadata objectAtIndex:5] floatValue];
tmpBoard.isErasing = [[metadata objectAtIndex:6] intValue];
tmpBoard.eraseSize = [[metadata objectAtIndex:7] floatValue];
tmpBoard.isSelected = [[metadata objectAtIndex:8] intValue];
tmpBoard.layers = [NSMutableArray arrayWithContentsOfFile:layersFilename];
[newDrawData addBoard:tmpBoard];
}
else {
keepLoading = NO;
}

[tmpBoard release];

}

[pool release];

return newDrawData;

}

最佳答案

您应该养成以下两种习惯:

1)添加到自动释放池

NSString *imageFilename = [[[NSString alloc] initWithFormat:@"iCanvas_image_%d.png", curIndex] autorelease];

要么

2)发送释放消息(完成使用后)
[imageFilename release];

使用这种模式声明的变量:
    NSString *imageFilename = [[NSString alloc] initWithFormat:@"iCanvas_image_%d.png", curIndex];

基本上是
[[blah alloc] init];

阅读更多: http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/

关于ios - 仪器说我有12个内存泄漏,如何消除它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343030/

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