gpt4 book ai didi

objective-c - NSData 释放内存

转载 作者:行者123 更新时间:2023-12-02 21:51:44 29 4
gpt4 key购买 nike

我的程序的一部分读取目录,然后计算文件夹中每个文件的哈希值。每个文件都会加载到内存中,但我不知道如何释放它。我在这里阅读了很多主题,但找不到正确的答案。有人可以帮忙吗?

#import "MD5.h"
...

NSFileManager * fileMan = [[NSFileManager alloc] init];
NSArray * files = [fileMan subpathsOfDirectoryAtPath:fullPath error:nil];

if (files)
{
for(int index=0;index<files.count;index++)
{
NSString * file = [files objectAtIndex:index];
NSString * fullFileName = [fullPath stringByAppendingString:file];
if( [[file pathExtension] compare: @"JPG"] == NSOrderedSame )
{
NSData * nsData = [NSData dataWithContentsOfFile:fullFileName];
if (nsData)
{
[names addObject:[NSString stringWithString:[nsData MD5]]];
NSLog(@"%@", [nsData MD5]);
}
}
}
}

和MD5.m

#import <CommonCrypto/CommonDigest.h>

@implementation NSData(MD5)

- (NSString*)MD5
{
// Create byte array of unsigned chars
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];

// Create 16 byte MD5 hash value, store in buffer
CC_MD5(self.bytes, (uint)self.length, md5Buffer);

// Convert unsigned char buffer to NSString of hex values
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x",md5Buffer[i]];

return output;
}

@end

最佳答案

如果您使用 ARC,则在最后一次对数据的引用消失后,数据将在某个时刻自动释放。在您的情况下,这将是当它超出 if 语句末尾的范围时。

简而言之,您的代码没问题。

有一件事,创建数据对象时使用的一些内存可能保存在自动释放池中。在您返回事件循环之前它不会消失。如果将代码包装在 @autoreleasepool { ... } block 中,这个问题就会消失。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

关于objective-c - NSData 释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12329666/

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