Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 将间接指针强制转换为指向';CFReadStreamRef*';不允许使用ARC_Objective C_Automatic Ref Counting_Core Foundation_Foundation_Multiple Indirection - Fatal编程技术网

Objective c 将间接指针强制转换为指向';CFReadStreamRef*';不允许使用ARC

Objective c 将间接指针强制转换为指向';CFReadStreamRef*';不允许使用ARC,objective-c,automatic-ref-counting,core-foundation,foundation,multiple-indirection,Objective C,Automatic Ref Counting,Core Foundation,Foundation,Multiple Indirection,我想将CFStreamCreatePairWithSocketToHost与NSInput-和OutputStreams一起使用。我有两个IVARNSInputStream*\u inputStream和NSOutputStream*\u outputStream 下面给出了两条错误消息: CFStreamCreatePairWithSocketToHost(NULL, (__bridge_retained CFStringRef)self.hostname, self.port, (C

我想将
CFStreamCreatePairWithSocketToHost
NSInput
-和
OutputStream
s一起使用。我有两个IVAR
NSInputStream*\u inputStream
NSOutputStream*\u outputStream

下面给出了两条错误消息:

CFStreamCreatePairWithSocketToHost(NULL,
  (__bridge_retained CFStringRef)self.hostname, self.port,
  (CFReadStreamRef *)&_inputStream, (CFWriteStreamRef *)&_outputStream);
错误:ARC
错误:ARC不允许将间接指针强制转换为指向“
CFWriteStreamRef*
”(也称“
struct”\uu CFWriteStream**
”)的Objective-C指针


我该如何解决这个问题?我尝试使用
\u桥
,但收到了类似的错误消息。

将指针传递给实际的
CFReadStreamRef
CFWriteStreamRef
变量,然后在分配给NSTYPE时强制转换。基本上:

CFThingRef cfThing = NULL;
CFFunctionGetThing(&cfThing);
NSThing * nsThing = cfThing;

当然,您必须为
cfThing

添加适当的桥型转换并执行所有适当的引用计数操作。请思考ARC正在做什么,以及桥型转换要做什么:ARC负责保留/释放NSObject__这一责任的转移。例如,u_bridge_retained保留一个NSString,将指针转换为CFStringRef,并将执行匹配释放操作的责任交给使用CFStringRef的人

不可能用指向NSObjuts*的指针或指向核心基础RF的指针来工作。指针指向内存位置。任何类型的NSObjas*或核心基础对象都可以存储在那里。


您需要两个变量,一个用于NSInputStream*,另一个用于CFReadStreamRef。使用适当的桥接转换将NSInputStream*移动到CFReadStreamRef。现在你有你想要的了,可以把地址传下去了

这是唯一的方法吗?@WTP不确定-到目前为止,我没有花太多时间在ARC上。把它包起来!:)@WTP:别忘了,该函数将使用其自己的新CRStreamRefs来处理_inputStream和_outputStream的先前内容,因此您不妨将它们设置为CFStreamRefs。