gpt4 book ai didi

iphone - "readInBackgroundAndNotify"增加接收器的保留计数

转载 作者:行者123 更新时间:2023-11-29 13:40:54 25 4
gpt4 key购买 nike

我正在使用 NSFileHandle 从套接字读取数据。这就是我创建 filehandle 的方式:

filehandle = [[NSFileHandle alloc] initWithFileDescriptor:sock closeOnDealloc:YES];

我这样做:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readData:)    name:nil object:filehandle];
[filehandle readInBackgroundAndNotify];

我注意到,readInBackgroundAndNotifyfileHandleretainCount 增加 1。因此,当我释放此 filehandle一旦我完成读取数据,内存就不会被释放。因此它试图读取一些无效数据并且应用程序崩溃了。请注意,此问题出现在 ios 4.3 中,但不会出现在 ios 5 中。我在释放 filehandle 之前删除了观察者。在释放文件句柄对象之前我还应该做些什么吗?

最佳答案

I notice that, readInBackgroundAndNotify is increasing the retainCount of the fileHandle by 1.

因为它可能应该作为实现细节的一部分...您要求 filehandle 在后台有效地安排,这样如果数据到达,它会通知。

注意retainCount是没用的;在这种情况下它可能增加了 5 或 42。这是无关紧要的。最重要的是,您要求它在后台执行某些操作,并且在达到“停止在后台执行操作”状态之前,该对象可能仍然存在。

Hence when i release this filehandle once I am done reading data, the memory is not released.

你有没有告诉文件句柄停止在后台读取?也许通过 close 关闭它?如果没有,它可能会继续。

iOS 4 和 5 之间的区别在于,文件句柄可能存在逻辑,指出没有更多的观察者,因此自动停止读取。同样,您不应依赖的实现细节。

关于iphone - "readInBackgroundAndNotify"增加接收器的保留计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com