5

だから私Core Dataはいくつかの画像を保存するために使用します。(また、サブクラスは最新のもので生成されますmogenerator

(また、私はARCを使用しています)

ええ、私は参照を保持してディスクに保存できることを知っていますが、私は思った:

「ねえ、彼らはオプションを作ったので、私はそれを自分で管理する必要なしにそれを行うことができます!」

だから私はそれを試しました、そしてそれはそのようにロードされたすべてのデータが決して解放されないことを除いて完全に動作します。


ここに画像の説明を入力してください

ここに画像の説明を入力してください


画像の表示を担当するViewControllerの初期化では、通常のメインを指定しNSManagedObjectContextます。

そして、で呼び出されたメソッドで、画像を使用してviewDidAppear設定します。UIScrollView

編集:つまり、実際にはフェッチリクエストではなく、Entity11対多の画像があり、同じコンテキストからこのentity1を取得する画像を取得するために使用します。説明をわかりやすくするために単純化したかっただけです。

- (void)setupScrollViewWithEntity1:(Entity1 *)entity1 {
    DDLogVerbose(@"-- %@ : SETUP SCROLL VIEW --", self);
    // I remove any previous subviews
    [self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    self.scrollView.contentSize = self.scrollView.frame.size;

    /* Here I get the imagesArray with a NSFetchRequest */ 
    //So it's not really a fetch request I have an `Entity1` which have one-to-many with images and I use it to get the images
    NSSet *imagesSet = entity1.images;


    // So I have an NSArray holding all the Image object
    for (Image *image in imagesSet) {
        CGRect frame = self.scrollView.frame;
        frame.origin.x = image.numberValue*frame.size.width;
        UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:frame];
        scrollView.contentSize = self.scrollView.frame.size;
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.scrollView.frame];
        imageView.image = [UIImage imageWithData:image.image];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.userInteractionEnabled = YES;
        [scrollView addSubview:imageView];
        scrollView.delegate = self;
        scrollView.minimumZoomScale = 1.0;
        scrollView.maximumZoomScale = 3.0;
        [self.scrollView addSubview:scrollView];
    }
}

}

viewWillDisappearを保存すると、NSManagedObjectContextコントローラーの割り当てが解除されると、すべてのデータも割り当て解除されると予想されますが、データは永久にメモリに残ります。

この行はどういうわけかそれを保持しています理由はわかりません:imageView.image = [UIImage imageWithData:image.image];

私はそれに3日間を費やしてすべてを使おうとしましたが、Instrumentsどこかに強力な参照がないかどうかを再確認しました。

問題は、私が確信していることです。ツールでそれを確認しUIViewControllerますが、何らかの理由で、アプリがクラッシュするまでデータは永久にメモリに残ります。deallocInstrumentsAllocation


これは、メモリ内の20枚までの画像が割り当て解除されていないリストです。

ここに画像の説明を入力してください


そして、これが最初のオブジェクトの詳細です:

ここに画像の説明を入力してください

ここまで読んでくれてありがとう、私は本当に必死です:(

4

1 に答える 1

2

画像が終わったらreset、電話をかけてみましたか?NSManagedObjectContextこれにより、ロードされたオブジェクトがメモリ内のオブジェクトグラフから削除されます。次に必要になったときに、disk/dbからフェッチする必要があります。

于 2013-03-02T00:38:31.817 に答える