2016-04-21 11 views
1

私はUIPageViewControllerの一部であるUIViewを持っています。 このビューに強いオブジェクトを渡し、解放に問題があります。UIViewライフサイクルでビューが破棄されるときを知る

私は以前、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

あなたは保持サイクルを持っていますか?何か弱いですか?コードを表示せずに/オブジェクトが参照しているものを説明することは私たちが本当に助けることができません – Wain

+0

私はそれを保持しない場合、NSFetchedResultsControllerから解放されるので、データを提供するコアデータオブジェクトを保持する必要があります。私は、ビューがもはや使用されなくなるときを知る方法を知らないので、このビューのオブジェクトをUICageViewVontrollerから解放するのがいつ安全であるか分かりません。 –

+0

@Wain実際には、コードを見直しましたが、この瞬間に私はおそらくリンクを弱くすることができます。テストは今、それはそれを解決するようだ。あなたがその提案を答えにしたら、私はそれを受け入れます。 –

答えて

1

ビューはアンロードされません。最新のデバイスでは、非常に厳しいメモリ制限がなく、その他の最適化もあります。ビューを言うときに実際にView Controllerを参照しているように見えますが、これは少し混乱します。

ビューコントローラ(VC)にデータが提供されている場合、そのデータが破棄されるまで参照を保持できます。データは、VCまたはそのビューを保持するべきではありません。あなたが何らかの観察/委任をしているなら、そのリンクは保持サイクルを防ぐために弱いはずです。

このようにして、VCが不要になったとき、つまり親またはプレゼンターからVCが削除されたときにデータが解放されます。

具体的にコアデータとNSManagedObject Sへの参照のために、あなたは障害にオブジェクトをオンにし、メモリからデータを削除するにはNOのフラグを付けてrefreshObject:mergeChanges:を呼び出すことにより、システムを助けることができます。ビューが消えたときにこれを行うことができます。

関連する問題