gpt4 book ai didi

objective-c - self 释放后

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:52:01 25 4
gpt4 key购买 nike

我正在使用第三方 Objective-C 库,它在后台线程中发出网络请求,然后使用 [self performSelectorOnMainThread:...] 返回结果,然后调用委托(delegate)方法。我知道在释放委托(delegate)之前我需要 nil 委托(delegate)引用,但我想知道如果在后台线程运行时这个请求对象本身被释放会发生什么。此内部 self 引用是否会设置为 nil 以便 -performSelectorOnMainThread: 调用是无害的,还是这里有可能发生崩溃?

最佳答案

据我了解您的情况(但您可能应该包括一些代码),声明:

 [self performSelectorOnMainThread:...]

应该是在你的线程中执行的最后一个(因为它是返回你的线程结果的方式,它仍然是传递给 NSThread 的线程选择器的一部分)。

如果它是合理的,那么请考虑当你第一次分离一个 NSThread 时,你传递给它一个 target 对象(你的 self)只要传递的选择器没有完成,NSThread就会保留它。这将包括您的[self performSelectorOnMainThread:...],因此,除非有人严重破坏releases,否则self 应该没有机会在执行 [self performSelectorOnMainThread:...] 之前被释放。

如果您的问题是如果有人乱用 releases 会发生什么,我会再考虑一下。

关于objective-c - self 释放后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256089/

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