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
Cocoa 电弧不相容型铸造_Cocoa_Automatic Ref Counting_Foundation - Fatal编程技术网

Cocoa 电弧不相容型铸造

Cocoa 电弧不相容型铸造,cocoa,automatic-ref-counting,foundation,Cocoa,Automatic Ref Counting,Foundation,我使用的是从苹果有用的UIElementUtilities应用程序中借用的核心基础方法。问题是,我希望更新这个借用的方法,使其在苹果新的自动参考计数(ARC)系统下运行。通过在变量之前插入“\u bridge”限定符,我在适应大多数借用的方法方面取得了一些进展,但是使用下面所示的方法,在尝试转换为ARC后,我得到了以下错误:“错误:不兼容的类型使用\u bridge cast将“NSString”\u strong*”转换为“CFTypeRef*”(也称为“const void**)并转换为“\

我使用的是从苹果有用的UIElementUtilities应用程序中借用的核心基础方法。问题是,我希望更新这个借用的方法,使其在苹果新的自动参考计数(ARC)系统下运行。通过在变量之前插入“\u bridge”限定符,我在适应大多数借用的方法方面取得了一些进展,但是使用下面所示的方法,在尝试转换为ARC后,我得到了以下错误:“错误:不兼容的类型使用\u bridge cast将“NSString”\u strong*”转换为“CFTypeRef*”(也称为“const void**)并转换为“\u bridge cast”。如何使“actionDescription”缓冲区成为可接受的指针,以便将其内容重铸为NSString

+ (NSString *)descriptionOfAction:(NSString *)actionName ofUIElement:(AXUIElementRef)element {

NSString * actionDescription = nil;

AXUIElementCopyActionDescription(element, (__bridge CFStringRef)actionName, (__bridge CFStringRef *)&actionDescription);

return actionDescription;

//return [actionDescription autorelease];
}有趣的问题

在ARC中,将引用指定给变量时,ARC需要知道如何处理变量的上一个值。如果变量是
\uuu strong
,则需要释放旧引用,如果变量是
\uuu不安全的\uu未恢复的
,则可以丢弃旧引用,等等。大多数情况下都会发生,而无需担心

当您传递一个指向包含引用的变量的指针时,它会变得有点复杂,ARC需要知道指向的变量上的限定符。Objective-C使用一种称为“通过写回传递”的技术,该技术可以使用隐藏的临时变量来确保所有变量都正常工作,有关详细信息,请参阅。核心基础没有这个等价物,这就是绊倒你的转换。

解决方案是将函数指针传递给核心基础类型变量,然后调用调用ObjtoFe C和ARC调用:

+ (NSString *)descriptionOfAction:(NSString *)actionName ofUIElement:(AXUIElementRef)element
{   
   CFStringRef actionDescription = nil;

   AXUIElementCopyActionDescription(element, (__bridge CFStringRef)actionName, &actionDescription);

   return (__bridge_transfer NSString *)actionDescription;
}
注意使用
\uuu bridge\u transfer
-函数名中的
副本
表示返回的
CFStringRef
归调用方所有,使用后必须释放,
\uu bridge\u transfer
将所有权交给ARC,ARC随后将负责释放引用

这是一个有趣的问题

在ARC中,将引用指定给变量时,ARC需要知道如何处理变量的上一个值。如果变量是
\uuu strong
,则需要释放旧引用,如果变量是
\uuu不安全的\uu未恢复的
,则可以丢弃旧引用,等等。大多数情况下都会发生,而无需担心

当您传递一个指向包含引用的变量的指针时,它会变得有点复杂,ARC需要知道指向的变量上的限定符。Objective-C使用一种称为“通过写回传递”的技术,该技术可以使用隐藏的临时变量来确保所有变量都正常工作,有关详细信息,请参阅。核心基础没有这个等价物,这就是绊倒你的转换。

解决方案是将函数指针传递给核心基础类型变量,然后调用调用ObjtoFe C和ARC调用:

+ (NSString *)descriptionOfAction:(NSString *)actionName ofUIElement:(AXUIElementRef)element
{   
   CFStringRef actionDescription = nil;

   AXUIElementCopyActionDescription(element, (__bridge CFStringRef)actionName, &actionDescription);

   return (__bridge_transfer NSString *)actionDescription;
}
注意使用
\uuu bridge\u transfer
-函数名中的
副本
表示返回的
CFStringRef
归调用方所有,使用后必须释放,
\uu bridge\u transfer
将所有权交给ARC,ARC随后将负责释放引用

这是一个有趣的问题

在ARC中,将引用指定给变量时,ARC需要知道如何处理变量的上一个值。如果变量是
\uuu strong
,则需要释放旧引用,如果变量是
\uuu不安全的\uu未恢复的
,则可以丢弃旧引用,等等。大多数情况下都会发生,而无需担心

当您传递一个指向包含引用的变量的指针时,它会变得有点复杂,ARC需要知道指向的变量上的限定符。Objective-C使用一种称为“通过写回传递”的技术,该技术可以使用隐藏的临时变量来确保所有变量都正常工作,有关详细信息,请参阅。核心基础没有这个等价物,这就是绊倒你的转换。

解决方案是将函数指针传递给核心基础类型变量,然后调用调用ObjtoFe C和ARC调用:

+ (NSString *)descriptionOfAction:(NSString *)actionName ofUIElement:(AXUIElementRef)element
{   
   CFStringRef actionDescription = nil;

   AXUIElementCopyActionDescription(element, (__bridge CFStringRef)actionName, &actionDescription);

   return (__bridge_transfer NSString *)actionDescription;
}
注意使用
\uuu bridge\u transfer
-函数名中的
副本
表示返回的
CFStringRef
归调用方所有,使用后必须释放,
\uu bridge\u transfer
将所有权交给ARC,ARC随后将负责释放引用

这是一个有趣的问题

在ARC中,将引用指定给变量时,ARC需要知道如何处理变量的上一个值。如果变量是
\uuu strong
,则需要释放旧引用,如果变量是
\uuu不安全的\uu未恢复的
,则可以丢弃旧引用,等等。大多数情况下都会发生,而无需担心

当您传递一个指向包含引用的变量的指针时,它会变得有点复杂,ARC需要知道指向的变量上的限定符。Objective-C使用一种称为“通过写回传递”的技术,该技术可以使用隐藏的临时变量来确保所有变量都正常工作,有关详细信息,请参阅。核心基础没有这个等价物,这就是绊倒你的转换。

解决方案是将函数指针传递给核心基础类型变量,然后调用调用ObjtoFe C和ARC调用:

+ (NSString *)descriptionOfAction:(NSString *)actionName ofUIElement:(AXUIElementRef)element
{   
   CFStringRef actionDescription = nil;

   AXUIElementCopyActionDescription(element, (__bridge CFStringRef)actionName, &actionDescription);

   return (__bridge_transfer NSString *)actionDescription;
}
注意使用
\uuu bridge\u transfer
-函数名中的
副本
表示返回的
CFStringRef
归调用方所有,使用后必须释放,
\uu bridge\u transfer
将所有权交给ARC,ARC随后将负责释放引用

HTH

谢谢你这么说