Lor*_*o B 9 memory-management objective-c retain nsobject performselector
这是SO中已经回答的问题,但我无法在Apple文档中找到它.你能指出我正确的方向吗?
在以下主题中
在将对象传递给-performSelector之前,我是否必须保留一个对象:withObject:afterDelay:?
对performSelector的保留计数的影响:withObject:afterDelay:inModes
是调用performSelector的对象:withObject:afterDelay是否被NSRunLoop保留?
默认行为似乎如下:它保留接收器和参数.
我正在使用以下代码
[[self delegate] performSelector:@selector(tryToSendStoreData:) withObject:userData];
Run Code Online (Sandbox Code Playgroud)
哪里userData是自动释放的对象.
记录保留计数(我知道它可能无效)传入的数据会增加其保留计数.在委托上调用方法时,保留计数不等于1.
所以,我的问题是:我是否需要执行一些内存管理以避免泄漏或者我是否必须相信Apple的东西?在这里,我作为一个不可知论者说话,因为我找不到合适的文档.
先感谢您.
new*_*cct 11
您正在查看文档中的错误功能.
保留
performSelector:withObject:afterDelay:和类似的函数(with afterDelay)保留接收器和参数,因为稍后执行
没有保留
performSelector:withObject:和类似的函数(没有 afterDelay)不保留任何东西,因为它们只是直接调用函数.
[[self delegate] performSelector:@selector(tryToSendStoreData:) withObject:userData];
Run Code Online (Sandbox Code Playgroud)
完全相同的事情
[[self delegate] tryToSendStoreData:userData];
Run Code Online (Sandbox Code Playgroud)
Man*_*nav 11
虽然@newacct给出了正确的答案,但它不是@Flex_Addicted提出的问题,即Apple的文档中引用的观察到的行为确实得到了保证.以下是(部分)引用,但我们必须经历几个环节才能到达那里 -
performSelector的文档:withObject:afterDelay:表明
此方法设置一个计时器,以在当前线程的运行循环上执行aSelector消息.
所以接下来我们头以上的文件NSRunLoop,并在那里,我们发现,只有一个方法存在允许的能力来排队的运行循环的东西-
performSelector:目标:参数:命令:模式:,其文档指出
此方法设置一个计时器,以在下一个运行循环迭代开始时在当前线程的运行循环上执行aSelector消息.计时器配置为以modes参数指定的模式运行... 接收器保留目标和anArgument对象,直到选择器的计时器触发,然后在清除时释放它们.
当然,没有什么可以保证[NSObject performSelector:withObject:afterDelay:]始终使用[NSRunLoop performSelector:target:argument:order:modes:](虽然这个答案会是完整的,如果有人能想出该文档),但至少这是对回答圣经谜语我们的谜语之谜的一个步骤.
| 归档时间: |
|
| 查看次数: |
4859 次 |
| 最近记录: |