UIImageView/UIImage “Memory Tag 70” release timing when scrolling

前端 未结 3 363
谎友^
谎友^ 2021-01-01 07:58

I have a long horizontal paged scrollview, for each page, I put a fullscreen UIImage.

As it is expensive and not necessary to add all UIImage at once, currently I la

相关标签:
3条回答
  • 2021-01-01 08:06

    From your graph it appears the memory consumption levels off, which is consistent with the images being cached and then released when the scroll stops (perhaps throughg an internal autorelease in the scrollview). That caching and memory buildup is probably making your scrolling smoother. If you really need to prevent memory build up then you will need to alloc and release the images manually yourself (echoing AnlmlsH's suggestion of forgoing imageNamed).

    But eliminating caching may result in jerkly scrolling....classic time/space tradeoff, and you need to determine which one is more important for your app's case.

    0 讨论(0)
  • 2021-01-01 08:10

    I would try the following:

    1. Don't use [UIImage imageNamed:] for loading images. That builds up in memory tag 70.
    2. Use the instance methods initWithContentsOfFile: and autorelease it explicitly. Note: Doing so would mean losing the caching advantage [UIImage imageNamed:] gives. But try it out.
    3. Use @autoreleasepool (instead of NSAutoreleasePool) around the code where image allocation happens. It can be used regardless of ARC.
    0 讨论(0)
  • 2021-01-01 08:26

    (Just a guess, I'm far from an Xcode to test it, and assuming a non-ARC environment)

    Instead of [otherImageView removeFromSuperview], you can use

    UIImage *image = [otherImageView.image retain];
    otherImageView.image = nil;
    [image release]; // the image won't go to the main autorelease pool
    [otherImageView removeFromSuperview]; // No one has references to otherImageView, so it goes to the autorelease pool
    

    To avoid the image going to the autorelease pool.

    0 讨论(0)
提交回复
热议问题