kil*_*anc 28 cocoa objective-c
我正在将我的套接字客户端转换为ARC:
- (id)initWithHostname:(NSString *)hostname AndPort:(NSInteger)port
{
if((self = [super init]))
{
oBuffer = [[NSMutableData alloc] init];
iBuffer = [[NSMutableData alloc] init];
iStream = [[NSInputStream alloc] init];
oStream = [[NSOutputStream alloc] init];
[NSStream getStreamsToHost:[NSHost hostWithName:hostname] port:port inputStream:&iStream outputStream:&oStream];
...
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
file://localhost /...foo.m:错误:自动引用计数问题:将非本地对象的地址传递给__autoreleasing参数以进行回写
在"&iStream"/"&oStream"的这一行
[NSStream getStreamsToHost:[NSHost hostWithName:hostname] port:port inputStream:&iStream outputStream:&oStream];
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
慭慭流*_*慭流觞 39
这个错误通常是由于非局部变量地址被传递给一个方法.因为该变量被声明为__strong默认,而该方法的参数是__autoreleasing,所以声明调用方法的参数为__strong,如下所示:__strong
注意头文件(.h文件)中的方法必须声明为与.m文件相同
Rud*_*uis 12
我认为你不应该分配和初始化iStream和oStream变量.他们打算收到.如果没有ARC,这只会造成两个未被注意的内存泄漏.现在你的编译器使用ARC然后它确实很重要.接收变量应该是本地的:
所以尝试:
NSInputStream *iStream;
NSOutputStream *oStream;
oBuffer = [[NSMutableData alloc] init];
iBuffer = [[NSMutableData alloc] init];
[NSStream getStreamsToHost:[NSHost hostWithName:hostname] port:port inputStream:&iStream outputStream:&oStream];
Run Code Online (Sandbox Code Playgroud)
那应该有用,AFAICT.但请注意:我无法在此测试.
归档时间: |
|
查看次数: |
19335 次 |
最近记录: |