Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 缓存URL-创建适当的NSString表示_Cocoa_Url_Caching_Hash_Nsstring - Fatal编程技术网

Cocoa 缓存URL-创建适当的NSString表示

Cocoa 缓存URL-创建适当的NSString表示,cocoa,url,caching,hash,nsstring,Cocoa,Url,Caching,Hash,Nsstring,我想在本地文件系统中缓存从URL下载的映像 我不知道的是,如何从URL创建与iOS文件系统支持的字符兼容的NSString。例如,如果我尝试创建一个名称中带有:的文件,它将失败 创建此NSString应遵循哪些步骤?简单的散列是最好的方法吗?如果是这样,我可以使用iOS中的哪个哈希例程?以下代码属于ZDS_SharedresolveLocalURLForRemoteURL接受远程URL并返回指向iOS文件系统上文件的URL。文件名将是一个字母数字字符串,与原始URL不相似,但这不应该是一个问题

我想在本地文件系统中缓存从URL下载的映像

我不知道的是,如何从URL创建与iOS文件系统支持的字符兼容的
NSString
。例如,如果我尝试创建一个名称中带有
的文件,它将失败


创建此
NSString
应遵循哪些步骤?简单的散列是最好的方法吗?如果是这样,我可以使用iOS中的哪个哈希例程?

以下代码属于ZDS_Shared
resolveLocalURLForRemoteURL
接受远程URL并返回指向iOS文件系统上文件的URL。文件名将是一个字母数字字符串,与原始URL不相似,但这不应该是一个问题

//NSData类别
-(NSString*)zs_摘要
{
uint8_t摘要[抄送摘要长度];
CC_SHA1([self bytes],[self length],digest);
NSMutableString*outputHolder=[[NSMutableString alloc]initWithCapacity:CC_SHA1_DIGEST_LENGTH*2];
for(int i=0;i
以下代码属于ZDS_Shared
resolveLocalURLForRemoteURL
接受远程URL并返回指向iOS文件系统上文件的URL。文件名将是一个字母数字字符串,与原始URL不相似,但这不应该是一个问题

//NSData类别
-(NSString*)zs_摘要
{
uint8_t摘要[抄送摘要长度];
CC_SHA1([self bytes],[self length],digest);
NSMutableString*outputHolder=[[NSMutableString alloc]initWithCapacity:CC_SHA1_DIGEST_LENGTH*2];
for(int i=0;i
我会使用哈希:

  • 它将使文件名更具可读性
  • 您可以避免文件名长度的问题
md5对于您的目的来说应该是完美的。不幸的是,ios5 sdk仅包含用于以下目的的C字符串函数:

CC_MD5(in, in_len, out);
函数包含在
中,还有其他哈希函数

您可以找到有关如何将其封装在接受/返回NSString的函数中的信息。

我会使用哈希:

  • 它将使文件名更具可读性
  • 您可以避免文件名长度的问题
md5对于您的目的来说应该是完美的。不幸的是,ios5 sdk仅包含用于以下目的的C字符串函数:

CC_MD5(in, in_len, out);
函数包含在
中,还有其他哈希函数

您可以找到有关如何将其封装在接受/返回NSString的函数中的信息

// NSData category
- (NSString*)zs_digest
{
  uint8_t digest[CC_SHA1_DIGEST_LENGTH];

  CC_SHA1([self bytes], [self length], digest);

  NSMutableString* outputHolder = [[NSMutableString alloc] initWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

  for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
    [outputHolder appendFormat:@"%02x", digest[i]];
  }

  NSString *output = [outputHolder copy];
  MCRelease(outputHolder);

  return [output autorelease];
}
CC_MD5(in, in_len, out);