我是iOS新手,我使用SMTP服务器实现后台邮件,在与主项目集成时我得到(将非本地对象的地址传递给_autoreleasing参数进行回写)这个错误我不知道如何解决这个问题,我提到这个link实现后台邮件。我用过这个SMTP库link下面的行获取错误,
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&inputStream outputStream:&outputStream];
在ARC下,参数声明为:
SomeObjectType ** parameterName
具有__autoreleasing
的隐式所有权限定符:
SomeObjectType * __autoreleasing * parameterName
这些参数是out参数,即它们从被调用的方法接收值而不是将值传递给被调用的方法,并且实际参数必须是局部变量的地址。这种机制称为pass-by-writeback。
错误消息告诉您,您传递的一个或两个地址不是局部变量的地址,即inputStream
或outputStream
中的任何一个或两个都不是局部变量。
简单的解决方法是引入用于参数的局部变量,并在调用后将返回的值复制到非局部变量中:
NSInputStream *tempInputStream;
NSOutputStream *tempOutputStream;
[NSStream getStreamsToHostNamed:relayHost port:relayPort inputStream:&tempInputStream outputStream:&tempOutputStream];
// copy return values to non-local variables
inputStream = tempInputStream;
outputStream = tempOutputStream;
如果你想了解out参数只接受局部变量的原因,请阅读Apple的Clang文档中的Passing to an out parameter by writeback。
HTH