Ale*_*kiy 2 objective-c nsdata
我的程序的一部分读取目录,然后计算文件夹中每个文件的哈希值.每个文件加载到内存,我不知道如何释放它.我在这里阅读了很多主题,但找不到正确的答案.有人可以帮忙吗?
#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]);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
如果您使用ARC,那么数据将在最后一次引用后的某个时刻自动解除分配.在你的情况下,这将是它在if语句结束时超出范围.
简而言之,你在那里的代码是可以的.
有一点,创建数据对象时使用的一些内存可能保存在自动释放池中.直到你回到事件循环中它才会消失.如果将代码包装在一个@autoreleasepool { ... }块中,那么该问题就会消失.
| 归档时间: |
|
| 查看次数: |
6304 次 |
| 最近记录: |