知道在UIView生命周期中何时会破坏视图

时间:2016-04-21 19:36:28

标签: ios objective-c iphone uiview

我有一个UIView,它是UIPageViewController的一部分。 我将一个强大的对象传递给了这个视图,并且在释放时遇到了问题。

过去我认为我使用viewDidUnload释放任何强对象,然后调用Dealloc。由于强大的对象,现在从未调用交易。

使用UIPageViewController知道icm的最佳方法是什么,不再需要该对象。即如果它是用户正在查看的页面旁边的视图,它可能会重新进入视图。因此,使用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;

1 个答案:

答案 0 :(得分:1)

视图不再被卸载,较新的设备不具备相当严格的内存限制,还有其他优化措施。看来,当你说视图时,你实际上是指视图控制器,这有点令人困惑。

如果您的视图控制器(VC)提供了一些数据,它可以保留对它的引用,直到它被销毁。数据不应该保留VC或其视图。如果你有任何观察/授权,那么该链接应该是弱的,以防止保留周期。

通过这种方式,当不再需要VC时,即从其父级或演示者中删除VC时,将释放数据。

特别是对于核心数据和对NSManagedObject的引用,您可以通过调用带有refreshObject:mergeChanges:标志的NO来帮助系统将对象变为故障并从内存中删除其数据。当视图消失时,您可以执行此操作。