我有一个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;
答案 0 :(得分:1)
视图不再被卸载,较新的设备不具备相当严格的内存限制,还有其他优化措施。看来,当你说视图时,你实际上是指视图控制器,这有点令人困惑。
如果您的视图控制器(VC)提供了一些数据,它可以保留对它的引用,直到它被销毁。数据不应该保留VC或其视图。如果你有任何观察/授权,那么该链接应该是弱的,以防止保留周期。
通过这种方式,当不再需要VC时,即从其父级或演示者中删除VC时,将释放数据。
特别是对于核心数据和对NSManagedObject
的引用,您可以通过调用带有refreshObject:mergeChanges:
标志的NO
来帮助系统将对象变为故障并从内存中删除其数据。当视图消失时,您可以执行此操作。