2

我正在尝试使用 ios5 制作应用程序,我真的很困惑为什么会发生这种情况。有人可以帮我解释一下为什么出现&error时会出现错误

将非本地对象的地址传递给 __autoreleasing 参数以进行回写

以下调用导致错误

// note the following method returns _inStream and _outStream with a retain count that the caller must eventually release

if (![netService getInputStream:&_inStream outputStream:&_outStream]) {

 NSLog(@"error in get input and output streams");
 return;
}

我的课.h

NSInputStream      *_inStream;
NSOutputStream     *_outStream;

@property (nonatomic, strong) NSInputStream *_inStream;    
@property (nonatomic, strong) NSOutputStream *_outStream;

我的课.m

@synthesize _inStream;
@synthesize _outStream;

getInputStream是一个NSNetService类方法

请在下面的 NSNetService 类 getInputStream 实现

/* Retrieves streams from the NSNetService instance. The instance's delegate methods are not called. Returns YES if the streams requested are created successfully. Returns NO if or any reason the stream could not be created. If only one stream is desired, pass NULL for the address of the other stream. The streams that are created are not open, and are not scheduled in any run loop for any mode.
*/
- (BOOL)getInputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream;

我找到了相关的帖子

非本地对象到自动释放参数

-指针所有权问题

非本地对象到自动释放

从 ios-4 到 ios-5arc-passing-address

但是我无法找到问题

对此问题的任何帮助表示赞赏

谢谢

4

2 回答 2

6

我找到了解决方案

开始了。将变量创建为本地变量并将它们分配回原始变量。感谢@borreden 提供的有见地的信息。

这是我最新的代码。

NSInputStream  *tempInput  = nil;
NSOutputStream *tempOutput = nil;

// note the following method returns _inStream and _outStream with a retain count that the caller must eventually release
if (![netService getInputStream:&tempInput outputStream:&tempOutput]) {

    NSLog(@"error in get input and output streams");
    return;
}
_inStream  = tempInput;
_outStream = tempOutput;
于 2012-08-06T10:26:53.000 回答
0

原因是你在使用ARC时不能通过你的_inStream和喜欢的。_outStream(因为您在转换后的版本中使用 ARC)

因为如果这些变量在方法中被覆盖,它们就会泄漏。

您需要更改您处理的返回值(如果它完全更改)或只是作为普通参数传递。

不再有带有保留/释放的显式内存管理,因此 ARC 无法自动处理这种情况。

于 2012-08-06T10:06:05.130 回答