大图片的分块加载实现

当在app中需要加载超大分辨率,比如现在的5K图片时,性能的优化就凸显出来了。那么通过什么方法来解决这个问题呢?我们可以采取UIScrollView和CATileLayer来实现,实现的效果类似于百度地图的分块加载 首先我们通过代码将大图裁剪成若干小图,MacOS代码如下所示。运行前将需要裁剪图片的地址添加到Edit Scheme中 int main(int argc, const ch...

音频播放中断处理

这里所讲的中断处理分为两种,第一种是软件级中断,比如来电。另一种是硬件级中断,比如插入耳机。当然这个软件级和硬件级仅仅做区分解释 软件级 当出现中断时,iOS SDK会发出对应的中断通知,开发者只需要监听对应的通知完成相应操作即可。 NSNotificationCenter *nsnc = [NSNotificationCenter defaultCenter]; [nsnc addO...

微信朋友圈页面实现解析

先上两个图,看下大致效果。Demo代码可以去我github中找 网上查阅了几种朋友圈的实现,最后决定采用这种方案。整个页面采用一个分组的tableview实现,组头中包含朋友圈的内容、用户头像、用户名称、图片组、时间标识、点赞区,如图中红框1中绿框所示部分。朋友圈的评论通过tableview的cell实现,如图中红框2所示。这样能更好的利用tableview的复用机制 关键点 ...

OC对象的内存布局

一、内存划分 介绍内存布局之前首先说一下内存的划分。OC程序的内存划分从高地址到低地址分别是栈区、堆区、全局区、常量区、代码区 1、栈区:存放局部变量和函数实参,iPhone的栈区是连续的空间,大小就几M,由系统管理 2、堆区:存放代码创建的对象,由开发者自己管理,非连续 3、全局区:存储全局变量和静态变量,由系统管理 4、常量区:存储常量字符串,由系统管理 5、代码区:存储二进制代码 ...

runtime应用

Runtime运行时是OC语言的一个特性,开发者可以在运行时中做甚多事情,下面主要介绍几种常用的应用,那就是获取类的实例变量、属性、方法列表。 创建一个用于测试的类,具体实现如下 //UserModel.h #import "Person.h" @interface UserModel : Person @property (nonatomic,strong) NSString *u...

消息转发经历了什么

unrecognized selector这个错误提示应该再熟悉不过了,我们都知道,OC的方法调用在运行时实际上是消息的发送。当程序向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找对应的方法运行。然而,如果在最顶层的父类中依然找不到相应的方法时,程序在运行时会崩溃并抛出异常unrecognized selecto...

基于融云实现应用公众号

好久没有研究融云相关的内容了,最近看到融云已经集成了公众号,有应用内的,也有接入第三方应用市场的。不得不说,融云在即时通讯这块内容做的已经很丰富了。这里没有打广告的意思,即时通讯SDK哪家强,仁者见仁智者见智,我不做对比。只是个人使用融云的产品较多,所以这里重点介绍基于融云的SDK实现应用内公众号服务。公众号消息的发送实际上应该是由应用服务器调用融云的接口来实现,这里采用的方式是客户端模拟服...

Xcode9报Invalid bitcode signature错误的解决方案

最近由于需要做iPhone X的适配工作,不得以升级了Xcode9和macOS High Sierra。升级后使用Xcode9编译原来的项目代码就出现了问题,会报一个Invalid bitcode signature的错误,经过多方查找问题,发现是pods的配置导致的,下面是解决方案 1、修改工程中pods的设置如下,可以参考原来Xcode8的工程配置 2、替换脚本 diff ...

浅谈iOS应用安全

之前一直以为iOS的应用保护机制多,算比较安全,可最近一个项目,由于特需原因需要做安全检测,看到报告我就傻眼了,所谓的安全,其实并不安全。下面就报告中的一些问题,给出一些修改建议 越狱检测 早几年前,苹果手机到手后,很多人第一件事想到的就是越狱,而那个时候,用户对信息安全还没有现在这么看重。你要问为什么要越狱?都会说“好玩啊,越狱之后能自定义很多东西~”。可以说,一直以来,越狱团队和苹果...

Cocoapods安装及使用

最近项目中在集成视频播放,采用了封装很优秀的开源播放器MobileVLCKit,这里使用的是V2.2.2版本。期间遇到了pods安装相当慢的问题,这里就记录一下cocoapods的安装方法和针对下载速度慢的pods项目如何处理 cocoapods安装 1、指定gem的源地址 //更换墙内地址 gem sources --add https://gems.ruby-china.org/ ...