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

关于在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 bundleUIImage * 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/archive/2013/05/02/3055222.html

内存图片IOS app启动动画的实现相关推荐

  1. 马蜂窝 iOS App 启动治理:回归用户体验

    增长.活跃.留存是移动 App 的常见核心指标,直接反映一款 App 甚至一个互联网公司运行的健康程度和发展动能.启动流程的体验决定了用户的第一印象,在一定程度上影响了用户活跃度和留存率.因此,确保启 ...

  2. iOS APP启动函数调用顺序~详解

    //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 一.OC调用 C++ 会为静态创建的对象生成初始化器,与静态语言不同,OC基于Runtime机制可以用类的名字来实例化一个类的对象. ...

  3. iOS App 启动性能优化

    为什么80%的码农都做不了架构师?>>>    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq. ...

  4. iOS App 启动优化

    简介: 作为程序猿来说,"性能优化"是我们都很熟悉的词,也是我们需要不断努⼒以及持续进⾏的事情:其实优化是⼀个很⼤的课题,因为细分来说的话有⼤⼤⼩⼩⼗⼏种优化⽅向 ,但是切忌在实际 ...

  5. iOS APP 启动页面的使用

    APP启动时候我们经常看到一个启动页面,我知道的有一下两种做法: LaunchScreen.storyboard 的运用 点击LaunchScreen.storyboard,用IB为LaunchScr ...

  6. ios App启动加载广告页面思路

    需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.虽然说这个广告页面对用户 ...

  7. QT TextEdit设置背景、明文加密、弹出网站、弹出自定义对话框、gif动态图片、程序启动动画、打包程序、关闭事件

    TextEdit设置背景 前提必须已添加了资源图片 铭文加密 ui->passLineEdit->setEchoMode(QLineEdit::Password); 弹出网站 #inclu ...

  8. iOS App启动页面

    很简单,直接把图片命名为Default.png就可以了,放在工程里,当app启动的时候就会有了 当然,不同的分辨率对应不同的名字,但是图片是相同的 4.0 inch screen: Default-5 ...

  9. iOS App启动+广告思路

    文章目录 需求 思路 1.判断文件是否存在,以及初始化广告位 2.无论沙盒中是否存在广告图片,都需要重新调用获取广告接口,判断广告是否更新 3.异步下载图片,以及删除旧图片 4.广告页面的跳过按钮倒计 ...

  10. iOS App启动广告

    一般情况下,App在每次启动时都会有广告,那么是自己自定义UIViewController来实现还是直接使用LaunchScreen.storyboard来实现呢? 因LaunchScreen的本质是 ...

最新文章

  1. css3 html5宽高不变,html – CSS圆圈,不使用固定的宽度和高度
  2. 求杨辉三角的前n行数据_LeetCode算法第118题:杨辉三角
  3. 【Boost】boost库中的小工具enable_shared_from_this
  4. php网站后台无法退出,zblog“网站关闭”后进入不了后台的解决方法
  5. linux mysql 5.6.23_mysql 5.6.23 的安装
  6. 冲击波内幕点滴 (转)
  7. 急救: Autodesk MapGuide Studio - Preview在MapGuide Open Source环境不能进行中文标注
  8. 实验五:大数据可视化工具-NodeXL
  9. 使用Euclid算法求最大公约数
  10. 在迪士尼打工,不快乐吗?
  11. 快应用如何接入微信支付
  12. Oracle报错1031,dataguard 归档日志报1031错误的一次处理
  13. onclick事件传参时传中文传不过去
  14. [视频教程] KBEngine mmo手游开发系列(三) - 角色技能与怪物系统
  15. vCenter 6.7升级到7.0
  16. RF使用技巧--导入自定义的库文件
  17. css3D制作立体旋转小方块
  18. TabLayout横排滑动
  19. vue中按ctrl原页面锁定打开新页面
  20. java计算机毕业设计高校教学资源共享平台MyBatis+系统+LW文档+源码+调试部署

热门文章

  1. Java 设计模式 之 工厂方法模式、抽象工厂模式
  2. php 服务器监控源码,PHP自动Get监控源码
  3. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_14-异常处理-异常处理的问题分析...
  4. 小论坛 之Linux服务器搭建Apache PHP mysql 环境
  5. Leetcode 137. Single Number I/II/III
  6. Java面试题之 static执行顺序
  7. 事件--[Asp.Net]
  8. c#生成随机彩色验证码例子
  9. 基础知识04 - 零基础入门学习汇编语言04
  10. notepad++格式化代码,自动对齐