在 UIView 生命周期中知道何时销毁视图
Posted
技术标签:
【中文标题】在 UIView 生命周期中知道何时销毁视图【英文标题】:Knowing when a view is going to be destroyed in UIView lifecycle 【发布时间】:2016-04-21 19:36:28 【问题描述】:我有一个 UIView,它是 UIPageViewController 的一部分。 我将一个强对象传递给此视图,但在释放时遇到问题。
过去我认为我使用 viewDidUnload 来释放任何强对象,然后调用 Dealloc。现在由于强大的对象,交易永远不会被调用。
使用 UIPageViewController 了解 icm 对象不再需要的最佳方法是什么。 IE。如果它是用户正在查看的页面旁边的视图,它可能会重新出现。所以使用 viewWillDisappeart 将无法正常工作。
@interface DOTourFloorPlanViewController : UIViewController <UIScrollViewDelegate, DOAsyncImageViewDelegate>
IBOutlet DOAsyncImageView* _imageView;
IBOutlet UIScrollView* _scrollView;
NSMutableArray* _beaconLabels;
UIView* _circle;
UIView* _centerDot;
DOTour* _tour;
CGRect _zoomRect;
int _circleCenterX;
int _circleCenterY;
bool _didZoomToLocation;
@property (strong, nonatomic) DOTour* tour;
【问题讨论】:
所以你有一个保留周期?应该是弱点吗?如果不显示代码/解释对象是什么引用,我们真的无能为力 我需要保留提供数据的核心数据对象,因为如果我不保留它,它将从 NSFetchedResultsController 中释放。我只是不知道何时可以安全地释放此视图中的对象 icm a UIPageViewVontroller,因为我不知道有什么方法可以知道何时不再使用该视图。 @Wain 实际上,我查看了代码,在这一刻我可能可以使链接变弱。现在测试,但这似乎解决了它。因此,如果您提出该建议作为答案,那么我接受它。 【参考方案1】:不再卸载视图,较新的设备没有如此严格的内存限制,并且还有其他优化。看起来,当你说 view 时,你实际上指的是视图控制器,这有点令人困惑。
如果您的视图控制器 (VC) 提供了一些数据,它可以保留对它的引用,直到它被销毁。数据不应保留 VC 或其视图。如果您有任何类型的观察/委托,那么该链接应该很弱以防止保留周期。
通过这种方式,当不再需要 VC 时,即当它从其父级或演示者中删除时,数据将被释放。
特别是对于核心数据和对NSManagedObject
s 的引用,您可以通过调用带有NO
标志的refreshObject:mergeChanges:
来帮助系统将对象变为故障并从内存中删除其数据。您可以在视图消失时执行此操作。
【讨论】:
以上是关于在 UIView 生命周期中知道何时销毁视图的主要内容,如果未能解决你的问题,请参考以下文章