Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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/7/arduino/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
Objective c 为ARC调整JSON_Objective C_Ios_Xcode_Automatic Ref Counting - Fatal编程技术网

Objective c 为ARC调整JSON

Objective c 为ARC调整JSON,objective-c,ios,xcode,automatic-ref-counting,Objective C,Ios,Xcode,Automatic Ref Counting,我使用JSON在应用程序中实现Facebook,我只是让我的代码变得友好。然而,当我做出这样的一行时 CFStringAppendCharacters((CFMutableStringRef)json, &uc, 1); 变成 CFStringAppendCharacters((__bridge CFMutableStringRef)json, &uc, 1); 我的应用程序无法再提取我的相册(我允许用户登录Facebook,然后显示他的相册,以便他/她获取一张照片供以后在应

我使用JSON在应用程序中实现Facebook,我只是让我的代码变得友好。然而,当我做出这样的一行时

CFStringAppendCharacters((CFMutableStringRef)json, &uc, 1);
变成

CFStringAppendCharacters((__bridge CFMutableStringRef)json, &uc, 1);
我的应用程序无法再提取我的相册(我允许用户登录Facebook,然后显示他的相册,以便他/她获取一张照片供以后在应用程序中使用)

这是ARC不欣赏的全部代码-(有人能给我一个如何桥接它的提示吗?)


有人知道我如何移植JSON框架供ARC使用吗?

我在你的评论中看到,你刚刚决定采用
NSJSONSerialization
,这肯定会奏效。但要真正回答你的问题

考虑到所涉及的内存管理,使用
\u桥
cast很容易
\uu bridge
只进行强制转换,不需要为您执行任何内存管理操作<代码>\u桥接\u传输也会强制转换,但它会减少正在强制转换的对象的保留计数。考虑到这一点,您的函数调用可以分解如下:

CFStringRef originalValue = (__bridge CFStringRef)value;// Only __bridge required because ownership not changing
CFStringRef escapeChars = (CFStringRef)@"!*'();:@&=+$,/?%#[]";// __bridge not required for string literal
CFStringRef escaped_CFString = CFURLCreateStringByAddingPercentEscapes(NULL, originalValue, NULL, escapeChars, kCFStringEncodingUTF8);// returns a CFStringRef that YOU own.
NSString *escaped_value = (__bridge_transfer NSString *)escaped_CFString; // __bridge_transfer tells the compiler to send a release call to escaped_CFString.
现在,您已经看到发生了什么,可以安全地按如下方式堆叠调用:

NSString* escaped_value = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(__bridge CFStringRef)value,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);

注意,这种方法仍然不那么可靠。更完整的解决方案可以在。

哪个JSON框架?为什么不从ARC中排除这段代码呢?或者,如果要使用ARC,为什么不使用NSJSONSerialization呢?你只会失去4.3支持。我试图将其从ARC中排除,但后来我的Facebook API崩溃了。如果我要使用NSJSONSerialization,我需要自己进行解析吗,还是已经完成了?我不一定要重写我已经拥有的功能。NSJSONSerialization是如何工作的?检查并查看最新的Facebook SDK(内置SBJSON库)是否与ARC兼容。NSJSONSerialization为您进行解析,并内置到Cocoa中。这可能是个不错的选择。
NSString* escaped_value = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(__bridge CFStringRef)value,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);