Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
Xcode 将iOS5应用程序转换为ARC_Xcode_Ios5_Automatic Ref Counting - Fatal编程技术网

Xcode 将iOS5应用程序转换为ARC

Xcode 将iOS5应用程序转换为ARC,xcode,ios5,automatic-ref-counting,Xcode,Ios5,Automatic Ref Counting,我正在将一些第三方代码集成到我的应用程序中,同时尝试将应用程序转换为ARC 我附加了一个屏幕截图来显示仅有的两个错误。如果有人知道如何重新编码这一部分,我将不胜感激 我还有一个问题要解决。解决这个问题最实际的方法是什么: value = (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,

我正在将一些第三方代码集成到我的应用程序中,同时尝试将应用程序转换为ARC

我附加了一个屏幕截图来显示仅有的两个错误。如果有人知道如何重新编码这一部分,我将不胜感激

我还有一个问题要解决。解决这个问题最实际的方法是什么:

value =  (NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,
                                                                                             (CFStringRef)value,
                                                                                             CFSTR(" "),
                                                                                             kCFStringEncodingUTF8);
这会产生以下错误:

“将Objective-C指针类型'NSString*'转换为C指针类型'CFStringRef'(也称为'const struct\uu CFString*')需要桥接转换”


再次感谢。。我将尽快丢失此代码…

您应该使用正常的objc消息传递,而不是像那样到处乱跑

此外,你应该:

  • vc
    设置为初始值设定项的结果
  • 无需在ARC程序中发送消息
    release
    (或调用
    [obj performSelector:@selector(release)];
    ),编译器将为您处理该消息

最后一个潜在问题是初始值设定项不应该使用这样的选择器。如果您真的需要这种形式,请考虑使用/传递便利构造函数而不是初始化选择器。

< P>您应该使用普通Objc消息,而不是<代码> PrExpReloStult:<代码>。 此外,你应该:

  • vc
    设置为初始值设定项的结果
  • 无需在ARC程序中发送消息
    release
    (或调用
    [obj performSelector:@selector(release)];
    ),编译器将为您处理该消息

最后一个潜在问题是初始值设定项不应该使用这样的选择器。如果你真的需要这种形式,考虑使用/传递一个方便的构造函数而不是一个初始化选择器。

你使用PyFraseStultor的唯一原因是:当选择器是动态生成的,如果你知道要使用哪一个选择器,那么你应该使用它,所以PrPrimeStult:@选择器(OLLC)完全没有意义。

使用performSelector的唯一原因是:当动态生成选择器时,如果您知道要使用的选择器,那么您应该使用它,因此performSelector:@selector(alloc)绝对没有意义。

无论如何都不应该使用
-performSelector:
。改用
objc\u msgSend(目标、选择器等)
。 如果调用
-respondsToSelector:
,则只需在If语句之后使用
[vc setDelegate:self.delegate]
。第一行也是如此。替换为:

UIViewController *vc = [vcClass alloc]; // vc = [[vcClass alloc] initWithSomething:[specifier file] ...]; if the initSelector is known at compile time
如果initSelector是动态生成的:

objc_msgSend(vc, initSelector, [specifier file], ...);
希望这有帮助

更新:第二个问题的答案

如果将CF对象传输到Objective-C对象,ARC需要知道如何处理内存管理。您必须在演员阵容之前插入
\uuuuuu桥
\uuuu桥
\uuuu桥
传输:

NSString *value;
value = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (__bridge CFStringRef)value, CFSTR(" "), kCFStringEncodingUTF8);

如果您只想在CF和Objective-C之间进行转换,请使用
\uu桥
\uuuuu bridge\u retained
如果它是保留值,并且您稍后使用CFRelease和
\uuuu bridge\u transfer处理它,如果您想将对象从CF传输到Objective-C,或者反之亦然。

无论如何都不应该使用
-performSelector:
。改用
objc\u msgSend(目标、选择器等)
。 如果调用
-respondsToSelector:
,则只需在If语句之后使用
[vc setDelegate:self.delegate]
。第一行也是如此。替换为:

UIViewController *vc = [vcClass alloc]; // vc = [[vcClass alloc] initWithSomething:[specifier file] ...]; if the initSelector is known at compile time
如果initSelector是动态生成的:

objc_msgSend(vc, initSelector, [specifier file], ...);
希望这有帮助

更新:第二个问题的答案

如果将CF对象传输到Objective-C对象,ARC需要知道如何处理内存管理。您必须在演员阵容之前插入
\uuuuuu桥
\uuuu桥
\uuuu桥
传输:

NSString *value;
value = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (__bridge CFStringRef)value, CFSTR(" "), kCFStringEncodingUTF8);

如果您只想在CF和Objective-C之间转换,则使用
\uuuu bridge
,如果它是保留值,则使用
\uuuu bridge\u retained
,如果您想将对象从CF传输到Objective-C或反之亦然,则稍后使用CFRelease和
\uu bridge\u transfer
进行处理。

谢谢Psycho,我拿出性能选择器:@selector(alloc)。至少代码是有效的。现在我有了这个功能,我计划用我自己的方法重写。多亏了Psycho,我拿出了performSelector:@selector(alloc)。至少代码是有效的。现在我有了这个功能,我计划用我自己的方法重写。@David DelMonte我最终删除了这个部分(关于销毁),因为它可能被解释为苛刻的(我不知道是你还是第三方写的),而实际上这只是一个危险信号。我也最喜欢费边的回答。我想你是对的,贾斯汀,但是谢谢。。这是一个第三方应用程序,我正在将其插入我的应用程序中,以便立即使用。我将测试我需要的功能并重写它。我感谢所有的答案。@David DelMonte我最终删除了这一点(关于销毁),因为它可能被解释为严厉(我不知道是你还是第三方写的),而实际上这只是一个危险信号。我也最喜欢费边的回答。我想你是对的,贾斯汀,但是谢谢。。这是一个第三方应用程序,我正在将其插入我的应用程序中,以便立即使用。我将测试我需要的功能并重写它。我感谢所有的答案。请注意,我在原来的帖子中又增加了一个问题。我希望我能再补充一点。。你对第二个问题的解决方案也很完美。。再次感谢..请注意,我在原来的帖子中添加了另一个问题.我希望我能再添加一点。。你对第二个问题的解决方案也很完美。。再次感谢你。。