首页
学习
活动
专区
圈层
工具
发布

【IOS开发进阶系列】APP性能优化专题

1 优化资源文件         在iOS本地资源文件编译后放置与应用程序包(Bundle)文件中即.app文件。...AIFF的压缩格式是AIFF-C(或AIFC),将数据以4:1压缩率进行压缩,应用于Mac OS X和iOS系统。...3.1.1  文件结构优化         文件要保存数据,应该是结构化的,苹果中的plist文件就是很好的结构化文件。plist文件结构是层次模型的树形结构,层次的深浅会影响读取/写入的速度。...l  -O2,是在-O1级别基础上再进行优化,增加的指令调度的优化,与-O1级别相比生成文件大小没有变大,编译时间变长了,编译期间占用内存更多了,但程序的运行速度有所提高。...该级别是应用程序发布时候的最理想级别,在增加文件大小的情况下提供了最大优化。 l  -O3,是在-O2和-O1级别上再进行优化,该级别可能会提高程序的运行速度,但是也会增加文件的大小。

1.2K20

【IOS开发基础系列】SDWebImageDownloader专题

查找图片是否已经在缓存中     3、如果内存中已经有图片缓存, SDWebImageManager会回调SDImageCacheDelegate: imageCache: didFindImage:...7、如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。...16、通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。     17、将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。     ...;     2、加载大量图片时,SD会将图片进行解压(加快渲染速度,但是内存会增大差不多一倍),然后将解压后的Image数据缓存在内存中,从而导致内存暴涨; 以下代码具有内存泄露问题:     // 原始方案...,发生内存猛增,直接闪退的情况,简单说一下解决方案 http://www.myexception.cn/swift/2033029.html 关于SDWebImage加载高清图片导致app崩溃的问题 http

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS小技能:图片压缩、图像格式的判断、获取gif图片循环次数和时长

    )durationForGifData:(NSData *)data{ //将GIF图片转换成对应的图片源 CGImageSourceRef gifSource = CGImageSourceCreateWithData...UIImage* imageName = [UIImage imageWithCGImage:imageRef]; //将图片加入数组中 [frames...启动图 背景:需要提供LaunchScreen.storyboard作为启动图,由于App支持的运行尺寸太多,不再适合用图片作为启动图 应用场景:修复iOS app版本迭代过程中,更新启动图之后遇到的启动图异常问题...让应用自动恢复正常的启动图 4.1 应用启动时加载启动图的流程 查找沙盒目录中是否存在可用的缓存启动图,如有则直接使用,否则根据 LaunchScreen.storyboard 生成新的启动图,并将其缓存至沙盒目录...4.3 解决方案 根据上面的流程,采用替换系统生成的缓存启动图方法进行实现 即用户安装应用后,系统会自动生成启动图并缓存至沙盒目录,接着用户启动应用时,通过代码将沙盒目录下缓存的启动图文件全部替换为通过代码生成的启动图

    1.9K30

    SDWebImage源码阅读-第三篇

    3.将UIImageView的image设置为上面的UIImage时,gif图会自动显示出来。...:(NSData *)data; // 将self.images数组中的图片按照指定的尺寸缩放,返回一个animatedImage,一次播放的时间是self.duration - (UIImage...,用duration累加,将图到出为UIImage,依次放到数组imges中 for (size_t i = 0; i < count; i++) { CGImageRef...90度,而mac由于会自动处理则正向显示),而如果使用UIImage的-imageWithCGImage:scale:orientation:方法创建图片,则会正向显示也就是实际拍摄时的效果。...图片的EXIF信息会记录拍摄的角度,SD会从图片数据中读取出EXIF信息,由于EXIF值与方向一一对应(EXIF值-1 = 方向),那么就使用+ sd_exifOrientationToiOSOrientation

    1.7K50

    探讨iOS 图片解压缩到渲染过程

    iOS设备双缓冲机制:显示系统通常会引入两个帧缓冲区,双缓冲机制 图片显示到屏幕上是CPU与GPU的协作完成 对应应用来说,图片是最占用手机内存的资源,将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程...,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤: 分配内存缓冲区用于管理文件 IO 和解压缩操作; 将文件数据从磁盘读到内存中...May return nil if image has no CGImageRef or invalid bitmap format UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation...); 因此,在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作,这就是为什么需要对图片解压缩的原因。...存在于 YYImageCoder 类中,核心代码如下 CGImageRef YYCGImageCreateDecodedCopy(CGImageRef imageRef, BOOL decodeForDisplay

    2.1K40

    iOS开发 - 图片的解压缩到渲染过程

    iOS设备双缓冲机制:显示系统通常会引入两个帧缓冲区,双缓冲机制 图片显示到屏幕上是CPU与GPU的协作完成 对应应用来说,图片是最占用手机内存的资源,将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程...,这个过程可能会对图片进行 copy 操作,而受图片是否字节对齐等因素的影响,这个 copy 操作可能会涉及以下部分或全部步骤: * 分配内存缓冲区用于管理文件 IO 和解压缩操作; * 将文件数据从磁盘读到内存中...May return nil if image has no CGImageRef or invalid bitmap format UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation...); 因此,在将磁盘中的图片渲染到屏幕之前,必须先要得到图片的原始像素数据,才能执行后续的绘制操作,这就是为什么需要对图片解压缩的原因。...存在于 YYImageCoder 类中,核心代码如下 CGImageRef YYCGImageCreateDecodedCopy(CGImageRef imageRef, BOOL decodeForDisplay

    2K00

    GPUImage详细解析(九)图像的输入输出和滤镜通道

    OpenGL ES控制内存中。...initWithImageSize:CGSizeMake(640, 480) resultsInBGRAFormat:YES]; [videoCamera addTarget:self.mOutput]; 2、输出的二进制数据转换为...代码地址 扩展 小端模式中ARGB的内存储存方式为BGRA。...大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。...小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

    2.6K80

    AFNetworking框架分析(五)——响应的序列化AFURLResponseSerialization分析

    从上往下,首先声明了AFURLResponseSerialization协议,协议中只有一个方法,将response解码成指定的相关数据,这是所有响应类都需要遵循的协议。...生成错误信息字典,会返回unacceptable content-type的信息,并将错误信息记录在了mutableUserInfo中。...将媒体类型的error信息放入至状态码error中userInfo字典的NSUnderlyingErrorKey值中去。...对CoreGraphics有兴趣了解的,可以看下阿里云对其介绍链接在此 首先将图片data封装至CGDataProviderRef对象中,然后只针对jpg与png格式的图片数据来单独给CGImageRef...在jpg格式中,AFN单独判断了CMKY类型的图片不支持转换为位图 // CGImageCreateWithJPEGDataProvider does not properly

    1.7K30

    iOS开发之AssetsLibrary框架使用

    二、概述     AssetsLibrary框架会操作系统的相册,因此首先需要进行权限的申请,在使用之前,首先需要在Info.plist文件中添加如下键值: Privacy - Photo Library...Usage Description AssetsLibrary框架中核心的类关系如下图所示: ?...:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock; //将某个路径的视频写入相册中 - (void)writeVideoAtPathToSavedPhotosAlbum...extern NSString *const ALAssetsLibraryChangedNotification; 通知中传递的信息中包含如下字段: //资源库更新 extern NSString...,如下方法可以获取到资源中封装的属性: - (id)valueForProperty:(NSString *)property; 属性名的定义如下: //获取资源类型 /* 这个属性将返回一个字符串 extern

    1.3K10

    图片资源以压缩包的形式放到服务端,在应用程序启动的时候批量下载

    ,且有7个地方会同时显示该图片 如果我们采用imageWithContentsOfFile:这种方式加载图片,那么在上面的场景下,就会占用5*7=35kb内存;而且会涉及到多次的IO操作,这是很耗性能的...UIImage(named: "") 1,简述 这种方式是通过文件的名称来加载图片:它会在bundle中去根据名称查找对应的图片资源,找到之后将图片文件资源转成NSData二进制,然后将NSData...缺点 第一次读取的图片会保存到缓冲区,然后永不销毁,如果这个图片过大,占用几百kb,并且图片的使用频率不高甚至只会使用到一次,那么由于这一块的内存不会释放,将必然导致内存的浪费!...以上就是官方瘦身方案中的App Slicing的过程。...但是该方案有很多的弊端,比如放弃了苹果官方瘦身方案中的App Slicing、IO操作过于频繁进而影响用户体验、增加了开发时间、不确定性大。

    45310

    一文学会iOS蓝牙开发

    一文学会iOS蓝牙开发 背景 最近做APP对接蓝牙设备开发,这里分享一下iOS对接蓝牙设备中需要注意的东西,大致包含下面这些方面: Xcode蓝牙权限 如何扫描蓝牙设备、获取Mac地址 不同蓝牙设备切换...这里需要注意的是,iOS的蓝牙,没有办法直接获取蓝牙设备的Mac地址,所以需要提供设备方将蓝牙Mac地址,放到advertisementData中提供,这里需要跟设备厂商确认好,获取逻辑,例如advertisementData...中哪个字段中包含有Mac地址,取值是第几位到第几位。...Data转16进制字符串 蓝牙返回的数据是 NSData 类型,此时可以调用下面方法将 NSData 转为 16进制字符串,然后针对字符串取指定位进行处理。...Ps:这里最好也先将字符串转为大写,再转为 Data // 将16进制的字符串转为NSData, 传入的字符串转为128位字符,不足位补数字,如果需要对应位,截取位置即可。

    3.6K20

    --从一个诡异的相册九图连读崩溃bug谈起

    关于"番外特别篇" 所谓"番外特别篇",就是系列文章更新期间内,随机插入的一篇文章.目前我正在更新的系列文章是 实现iOS图片等资源文件的热更新化.但是,这两天,被一个自己App中诡异的相册读取的Bug...3.确定是PHImageManager 的问题requestImageForAsset:方法引起的高内存占用 当你通过注释法,配合断点,很容易就可以引起内存高占用的代码.此处,我的App中,是读取相册原图...这么做,最好先备份或备注下. 5.使用imageWithData:兼容原来的调用 为了和原来的Api接口调用兼容,用imageWithData:将NSData转换为 UIImage 传出,同时扩展方法,...无法直接以UIImage格式,连续把九张图保存到缓存目录 图片选取后,并不是立即上传的,为了能实现"重发"功能,需要在缓存目录保留副本.原来是将 UIImage 转换为 NSData写入.在此过程中,又一次引起了巨额的内存开销...我真没想到,一个UIImage对象,竟然会二次引起高内存占用.最终的解决方法,就是在前一个页面传递 NSData数组,在赋值处,再使用imageWithData:转换为 UIImage.这样,内存使用基本没什么起伏

    2.2K70

    App Tamer Mac(CPU优化电池管理工具)v2.7.4

    App Tamer for Mac是一款Mac上CPU优化电池管理工具,通过降低或停止已不使用的应用所占用的CPU,能够大幅节省系统的资源,进而提高电池的使用时间,你可以通过灵活的配置,设置特定应用的CPU...图片App Tamer Mac功能介绍1.有不守规矩的应用程序?某些应用程序(尤其是Web浏览器和旧版应用程序)即使在闲置时也会继续运行任务或动画广告。...这使用了宝贵的处理(CPU)功能,让您:您正在使用的应用程序的CPU功耗更低增加了热量和风扇噪音减少电池运行时间2.用App Tamer驯服他们找到罪魁祸首并控制它们。...使用App Tamer,您只需执行以下操作:启动App Tamer并在您的菜单栏中单击其图标单击使用大量CPU的应用程序告诉App Tamer减慢或停止应用程序App Tamer会在您不使用应用程序时自动减慢或暂停应用程序...App Tamer的首选项让您可以根据自己的需要调整其行为,无论您是节俭地节省电池电量还是将每个CPU周期都用于星际争霸。5.Road Warriors注意!

    74020

    三重Des对称加密在Android、Ios 和Java 平台的实现

    引言 如今手机app五彩缤纷,确保手机用户的数据安全是开发人员必须掌握的技巧,下面通过实例介绍DES在android、ios、java平台的使用方法; DES加密是目前最常用的对称加密方式,性能优于非对称加密...(RSA),是手机app请求数据加密的优先选择。...由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。...********************************* 函数名称 : + (NSString *)base64StringFromText:(NSString *)text 函数描述 : 将文本转换为...********************************* 函数名称 : + (NSString *)base64StringFromText:(NSString *)text 函数描述 : 将文本转换为

    1.5K10
    领券