内存图片IOS app启动动画的实现

废话就不多说了,开始。。。

          关于在App启动时播放一段动画,可以用flash直接播放,也可以用多张续连的图片来实现,在项目中,我选择了后者。

    通过续连的多张图片做出动画效果,系统自带的UIImageView能就成完这个功能,一开始我也这么做的,但是最后发明内存爆了,占了800M多(iPAD)。(注:一张100K的png图片初始化为Image放到内存后会占用几M到几十M的间空不等)

      最后我选择了通过准时器断不新刷UIImageView.image的方法。

          在这里又被系统忽悠了一把。 [UIImgae imageName: ]和[UIImage imageWithContentsOfFile: ],这两个方法从理论上说,前者是系统分配一块内存缓存图片,并在app性命     周期内始终存在,而后者是时暂存于内存,过后就放释的。我用了后者,发明内存一样爆掉,乎似(确定)系统并没有放释内存。这个问题困扰了我半天,到底如何才能让系统实时放释这些间空,换个角度想可能更好,手动请申 —— 手动放释。

          于是我换成了[UIImage alloc]initWIthContentsOfFile: ]方法,这样就胜利的决解掉了内存没法放释的问题。我的动画图片又106张,测试中发明只占了40-50M的间空,可以受接。

          决解了内存问题,如何能让图片速快新刷就成了事不宜迟。

          我建了个缓存池,台后异步取读图片到NSMutiableArray中,主线程从array中取获image并准时新刷到ImageView中。这个方法在多核备设中性能有所提高,动画更加畅流。

          上面是心核代码:

    

    每日一道理
能够破碎的人,必定真正活过。林黛玉的破碎,在于她有刻骨铭心的爱情;三毛的破碎,源于她历经沧桑后一刹那的明彻与超脱;凡高的破碎,是太阳用黄金的刀子让他在光明中断不剧痛,贝多芬的破碎,则是灵性至极的黑白键撞击性命的悲壮乐章。如果说那些平凡者的破碎泄漏的是人性最纯最美的光点,那么这些优秀的灵魂的破碎则如银色的梨花开满了我们头顶的天空。
- (void) precache
{
	_cacheImages = TRUE;
	_cacheImageArray = [[NSMutableArray alloc]initWithCapacity:0];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"################################  image swap begin #########################");
        UIImage * img = nil;
        for (int i =1; i < [_imageNames count]; i++)
        {
            if(_cacheImageArray.count <= KSwapImageNum) {
                NSString * name = [_imageNames objectAtIndex:i];
                img = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:nil]];
                [_cacheImageArray addObject:img];
                [img release];img = nil;
            }else{
                [_requestCondition lock];
                [_requestCondition wait];
                [_requestCondition unlock];
                i--;
            }
        }
        NSLog(@"################################  image swap end #########################");
    });
}


- (void) setImageAtIndex:(NSInteger)index
{
	_imageset = TRUE;
	
	NSString * name = [_imageNames objectAtIndex:index];
    
	// load the image from the bundle
	UIImage * img = nil;
	if (_cacheImages)
	{
        if (_cacheImageArray.count > 0) {
            img = [_cacheImageArray objectAtIndex:0];
            // set it into the view
            _imageView.image = nil;
            [_imageView setImage:img];
            
            [_cacheImageArray removeObjectAtIndex:0];
            if (_cacheImageArray.count <= KSwapImageMinNum) {
                [_requestCondition signal];
            }
            img = nil;
        }
	}
	else
	{
		img = [[UIImage alloc]initWithContentsOfFile:
               [[NSBundle mainBundle] pathForResource:name ofType:nil]];
        // set it into the view
        [_imageView setImage:img];
        [img release];img = nil;
	}
}

           

文章结束给大家分享下程序员的一些笑话语录: 火车
一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现 列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶 奶和一个年轻漂亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较 暧昧地相互看对方。这时,火车进入山洞,车厢里一片漆黑。此时,只听见 一个亲嘴的声音,随后就听到一个响亮的巴掌声。很快火车出了山洞,他们 四个人都不说话。
那个老奶奶在喃喃道, “这个年轻小伙怎么这么无礼, 不过我很高兴我的孙女 扇了一个巴掌”。
项目经理在想,“没想到这个程序员居然这么大胆,敢去亲那姑娘,只可惜那 姑娘打错了人,居然给打了我。”
漂亮的姑娘想,“他亲了我真好,希望我的祖母没有打疼他”。
程序员坐在那里露出了笑容, “生活真好啊。 这一辈子能有几次机会可以在亲 一个美女的同时打项目经理一巴掌啊”

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3055222.html