我正在使用第三方Objective-C库在后台线程中发出Web请求,然后使用[self performSelectorOnMainThread:...]
返回结果,然后调用委托方法。我知道我需要在发布委托前委托引用nil
,但我想知道如果在后台线程运行时请求对象本身被取消分配会发生什么。此内部self
参考值是否设置为nil
,以便-performSelectorOnMainThread:
调用是无害的,还是有可能导致崩溃?自我释放
Q
自我释放
2
A
回答
2
据我了解你的情况(但可能你应该包括一些代码),声明:
[self performSelectorOnMainThread:...]
应该在你的线程中执行的最后一个(因为它是返回的路上你的线程的结果,它仍然是传递给NSThread
的线程选择器的一部分)。
如果是合理的话,那么考虑当你第一次分离的NSThread
,你传递一个target
对象(您self
),并只要通过selector
尚未完成NSThread
将retain
它。这将包括你的[self performSelectorOnMainThread:...]
,所以,除非有人用releases
大量混乱,否则self
在[self performSelectorOnMainThread:...]
执行之前不应该被释放。
如果您的问题确实如果有人与releases
混淆会发生什么,我会再次考虑这一点。
2
如果在主线程上的方法完成之前解除分配了对象,则会出现内存管理问题。 performSelectorOnMainThread:…
方法家族使得接收者在完成其工作之前一直保留下来,所以解除分配的唯一方式是如果你过度释放对象。
相关问题
- 1. self removeFromSuperView不释放自我?
- 2. 自动释放与释放
- 3. 释放或自动释放的对象
- 4. 自动释放和释放功能
- 5. MKReverseGeocoder自动释放/释放问题
- 6. 关于自动释放/释放和[池释放]
- 7. 如何在touchesEnded中释放自我(UIImageView)?
- 8. 我可以自动释放NSOperationQueue吗?
- 9. 我应该在iPhone OS中排放还是释放一个自动释放池?
- 10. 自动释放CGMutablePathRef?
- 11. 使用[自我释放],[自我保留]是好方法吗?
- 12. 保留一个自动释放变量,我在哪里释放它?
- 13. Objective-C自动释放池
- 14. 自动释放池块
- 15. 如何自动释放CGColorRef
- 16. 自动释放池dillema
- 17. 自动释放物体
- 18. iOS自动释放池块
- 19. TableViewCell自动释放错误
- 20. 如何自动释放CGLayer?
- 21. ARC自动释放过早
- 22. 自动释放池调试
- 23. 自动释放溺水
- 24. 什么时候释放了一个自动释放的对象?
- 25. Objective-C的释放,自动释放,澄清需要
- 26. Objective-C自动释放池不释放对象
- 27. 以后自动释放或释放是否更好?
- 28. 释放自动释放的字符串对象不会崩溃
- 29. 分配和释放VS.自动释放。为什么和何时?
- 30. 双释放自动释放对象不会崩溃
这就是我缺少的部分(即新线程将保留'self')。谢谢! – jrdioko 2011-06-06 18:30:41