假设我用参数中给定的对象分配一个实例var。我不知道这个对象是什么,所以我不想保留它。但是,我对该对象的引用在某些时候可能是无效的,例如,如果对象被释放或即将释放(autorelease池)。所以,在我的类实例中,我可以知道引用我保存到一个实例变量可以使用没有任何崩溃的风险?iPhone - 有没有办法知道引用是否(仍然)有效?
1
A
回答
1
Kris Van Bael是对的,不管你是否知道对象是什么,如果你想拥有它(如果它是由你来确保对象是活着的),你必须保留它。当您不需要它时释放它,并将引用设置为NIL(用于安全性)。
但他们是个例外!
有时你不想拥有所有权,最常见的例子是委托。 你不想保留你的委托,因为它可能已经保留了你,并且如果两个对象在dealloc方法中相互释放,你的应用程序将会泄漏。
但是在这种情况下,你不应该关心被释放的委托:委托应该设置你的“委托”属性在它的dealloc方法中为零。
所以
- 如果你有对象的所有权:保留,别无选择!
- 如果对象拥有您的所有权:分配,不用担心!
0
2
您应该保留它并在不再需要时释放它。这正是保留的目的。
1
这种方法非常危险。如果您的应用程序无法跟踪对象生命周期,那么您必须更改代码才能控制它。 无论如何回答你的问题:你可以通过额外保留你的实例变量来保护你的实例变量,然后在不再需要时释放它。所以你不需要做你想要的支票。
相关问题
- 1. 是否仍然有效?
- 2. Sharekit是否仍然有效?
- 3. 有没有办法知道手机是否有通话?
- 4. 有没有办法知道用户是否发送了短信?
- 5. 有没有办法知道Data Saver是否启用?
- 6. 有没有办法知道异常是否被禁用?
- 7. 有没有办法知道用户是否打开邮件?
- 8. Maven有没有办法禁用模块,但仍然让父母知道它们?
- 9. 有没有办法知道文件名是否是Excel格式?
- 10. 有没有办法知道timerTask是否已完成?
- 11. 有没有办法知道一行是否更新?
- 12. 有没有办法知道Flash Player是否安装了SWFObject?
- 13. 有没有办法知道rxjs websocket是否打开
- 14. 有没有办法知道ExecutorService是否成功结束?
- 15. 有没有办法知道HttpResponse是否在Https中?
- 16. 有没有办法知道是否已经创建了IWin32Window?
- 17. 有没有办法知道$ http请求是否超时?
- 18. 有没有办法让webpack知道全局是否没有声明?
- 19. iOS:有没有办法知道用户是否选择了退出通知?
- 20. 有没有办法确定Firebase用户的UID是否有效?
- 21. 有没有办法知道一个对象的C#方法是否被调用?
- 22. 有没有办法仍然调试和Xcode 4
- 23. 有没有办法知道SD卡上的目录是否有任何图像?
- 24. 典雅地检查HTTPSession引用是否仍然有效
- 25. 有没有办法知道当前域是否启用地理定位?
- 26. 有没有办法知道用户是否喜欢Facebook上的对象?
- 27. 有没有办法知道电子邮件是否用C#成功转发?
- 28. 有没有办法知道客户是否使用了优惠券代码?
- 29. 有没有办法检查子进程是否仍在运行?
- 30. 有没有办法确定JDBC事务是否有效?
那正是我在寻找的东西。谢谢 ! – Oliver