IOS
文章平均质量分 84
敬业的程序猿
~~
展开
-
iOS的包瘦身实践
随着业务的快速增加,商城App的大小也在迅速增加,一度超过了300M。安装包大小的不断增加对App下载成本,推广效率产生了比较大的影响。从2018年9月份我们对商城App开始了为期二期的专项瘦身工作:一期从V7.2.0-V7.5.2版本,共计瘦身46M(设备:iPhone X,iOS12)。为了进一步减小包大小,同时为了建立长效机制,从今年5月份开始了第二期的专项优化工作,二期优化从最高的V8.1.0版本的272M到现在的V8.4.0的214.4M共计已经完成瘦身57.6M,当然二期优化还在继续推进中。瘦身原创 2021-10-12 10:19:34 · 523 阅读 · 0 评论 -
IOS热更新的原理
1、首先来介绍一下JSCore的原理和通信机制JSCore 是什么?大家都知道浏览器内核的模块主要是由渲染引擎和JS 引擎组成,其中 JSCore 就是一种 JS 引擎Apple 通过将 WebKit 的 JS 引擎用 OC 封装,提供了一套 JS 运行环境以及 Native 与 JS 数据类型之间的转换桥梁,常用于 OC 和 JS 代码之间的相互调用,这也意味着他可以脱离渲染单独去执行 JS。JSCore 主要包括如下这些 classes、协议、类结构:JSCore的运行模...原创 2021-05-10 10:49:07 · 2186 阅读 · 1 评论 -
ios坐标系的转换方法解析
- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;- (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;- (CGRect)convertRect:(CGRect)rect fromVie原创 2021-05-03 10:07:37 · 621 阅读 · 0 评论 -
Block的总结
总结block的本质就是Objective-C对象,block的调用就是函数指针的调用。block的本质是一个封装了函数调用以及函数调用环境的OC对象; block截获自动变量值的规则: 局部变量会被直接截获; 局部静态变量会被截获其指针; 全局变量并不会被截获,而是直接使用; block截获对象的规则: block位于栈上,则不会对截获的对象变量进行强引用; block从栈上复制到堆上,调用copy函数,对截获的变量进行强/弱引用; block从堆上移除,调用dispo原创 2021-03-18 20:31:58 · 139 阅读 · 0 评论 -
iOS性能优化的几个方向
一、界面优化1、卡顿原理要了解卡顿原理,需要对帧缓冲区、垂直同步、CPU 和 GPU 几个词进行一下了解,然后综合起来,就可以得到卡顿的答案。1.1、帧缓冲区听起来很高大上,其实就是用来存放每一帧画面数据的一个 “仓库”,一个仓库只存放一帧画面的数据,iOS 一直是双缓存,就是有两个仓库,存当前帧数据的叫 “正式仓库”,存下一帧数据的叫 “预备仓库”。当正式仓库的数据被取走后,两者身份交换,原来的预备仓库转正为正式仓库,原来的正式仓库变成预备仓库。1.2、垂直同步 (VSync)原创 2021-03-15 21:46:03 · 955 阅读 · 0 评论 -
锚点和position的关系
1.position定义:某一个视图的layer的position表示,该视图的layer的锚点在父视图的layer中的位置,默认的数值是视图layer的中点的数值。从上面的定义的第二句来看,position表示的是在父视图中的位置!2. anchorPoint定义:锚点,就像船锚一样,起着固定的作用,有风浪时,船会围着船锚旋转;锚点也是这样的,说白了就是固定视图用的点,每当我们给视图添加一个旋转动画时,就是围绕该点进行旋转的。3. 记住一点:position 和 锚点 必须是...原创 2021-03-07 11:34:06 · 349 阅读 · 0 评论 -
CALayer的modellayer和presentionlayer的区别
图层树的类型layer tree 分为 model layer tree(模型图层树) 、presentation layer tree(表示图层树) 、render layer tree(渲染图层树)图层树的结构这三种图层树有什么作用呢?说到有啥作用,就不得不提Core Animation 核心动画了。因为这三个图层在核心动画中才能显示出它们的特点和用处。下面是官方文档的说明:模型图层树中的对象是应用程序与之交互的对象。此树中的对象是存储任何动画的目标值的模型对象。每当更改图层的属性..原创 2021-03-07 11:04:35 · 438 阅读 · 0 评论 -
iOS线程和队列的关系
线程与队列说不清道不明的关系:线程是代码执行的路径,队列则是用于保存以及管理任务的,线程负责去队列中取任务进行执行。 我的理解:多个队列的任务可以在一条线程上执行,一个队列的任务也可以在多条线程上执行。个人理解,队列可以包含线程,线程也可以包含队列。dispatch_sync:立马在当前线程执行任务,执行完再往下走,这句话就可以解释很多问题。dispatch_async:不要求立马在当前线程执行任务,可能会开启新线程,也有可能不会。一、画图解释下队列跟线程间的关系1、一个队列对应一...原创 2021-03-06 10:31:04 · 2429 阅读 · 0 评论 -
智能家居设备连接路由的技术AirKiss
AirKiss原理分析一、 AirKiss概述AirKiss技术是一种创新性的信息传递技术。通过该技术可以便捷的向一台 与外界没有建立任何一种实质性连接(包括有线、无线、蓝牙、NFC等)的设备传递信息(可以是环境中Wifi的ssid、密码等信息)。AirKiss 技术示意图如下图所示,智能插座与外界没有建立任何一种实质性连接, 可以称之为信息孤岛。通过 Air Kiss 技术,微信客户端 可以将环境中的 Wifi 的ssid 与密码便捷的隔空传递给智能插座,从而使得智能插座能够快速的接入 Wif...原创 2021-03-03 11:16:44 · 652 阅读 · 2 评论 -
iOS链接外部设备的几种方式
一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的app被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者发送指令控制硬件来提供服务。故本文就针对iOS的app如何跟外部设备进行连接通信这个问题跟大家交流一下。本文原创,欢迎转载,转载请注明出处,如有不正确的地方恳请各位看官指正。可以分为三大类:第一类是通过网络端口,原创 2021-03-03 11:01:41 · 1937 阅读 · 0 评论 -
iOS使用自签名证书实现HTTPS请求
由于苹果规定2017年1月1日以后,所有APP都要使用HTTPS进行网络请求,否则无法上架,因此研究了一下在iOS中使用HTTPS请求的实现。相信大家对HTTPS都或多或少有些了解,这里我就不再介绍了,主要功能就是将传输的报文进行加密,提高安全性。1、证书准备证书分为两种,一种是花钱向认证的机构购买的证书,服务端如果使用的是这类证书的话,那一般客户端不需要做什么,用HTTPS进行请转载 2017-09-21 16:41:02 · 556 阅读 · 0 评论 -
简谈runtime运行机制之消息发送与转发
首先介绍一下相关的参数信息一、SELSEL又叫选择器,是表示一个方法的selector的指针,其定义如下:typedef struct objc_selector *SEL;两个类之间,不管它们是父类与子类的关系,还是之间没有这种关系,只要方法名相同,那么方法的SEL就是一样的。每一个方法都对应着一个SEL。所以在 Objective-C同一个类(及类的继承体系)中原创 2017-07-07 10:23:22 · 700 阅读 · 0 评论 -
iOS数组排序简单介绍
摘要: 总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors:大体上,OC中常用的数组排序有以下几种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDe转载 2017-06-28 10:11:04 · 988 阅读 · 0 评论 -
WKWebView与JS交互详情.
目录(?)[+]WebKit(展示Web界面)WebKit(WKScriptMessageHandler)WebKit(WKUIDelegate)WebKit(WKNavigationDelegate)WebKit(刷新)WebKit(导航)WebKit(浏览记录)WebKit(进度条)上一篇博文《WebKit(展示Web界面)》讲解了显示Web页面,这一篇博文将讲解使用WKScriptMessa...原创 2018-04-14 15:47:54 · 272 阅读 · 0 评论 -
简单瀑布流实现
实现效果这里实现了一个较为复杂的瀑布流效果,在基本的高度不一的瀑布流上,增加了占据两列宽度大小的cell,效果如图:fall.gif具体实现1,技术基础这里使用了UICollectionView来展示瀑布流,通过自定义UICollectionView对象的collectionViewLayout,来实现对UICollectionView中ce转载 2017-07-04 18:20:43 · 525 阅读 · 0 评论 -
React-Native学习指南
http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=1006yi hui yun转载 2017-06-29 09:43:47 · 313 阅读 · 0 评论 -
navBar设置透明效果
首先我们来看下效果一开始当我们什么只设置了一张图片作为它的头部视图的时候,它是这样的1.首当其冲的,我们先得把导航栏弄透明那么我们首先得知道,设置navigationBar的BackgroundColor为Clear是没用的,你可以试着设置它的clear,但是没用,原因一会儿我们就知道了。而对于把导航栏设置为透明,网上大多数的方法是:转载 2017-06-23 14:38:35 · 3345 阅读 · 0 评论 -
iOS动态关联对象
在iOS运行过程中,有几种方式能够动态的添加属性。1-通过runtime动态关联对象主要用到了objc_setAssociatedObject,objc_getAssociatedObject以及objc_removeAssociatedObjects[objc] view plain copy//在目原创 2017-06-22 17:23:18 · 343 阅读 · 0 评论 -
React-Native简单介绍
React-Native 入门指导系列教程目录一、准备工作 (已完成)二、项目介绍与调试三、CSS样式与Flex布局四、常用UI控件的使用五、JSX在React-Native中的应用六、事件与数据调用七、自定义组件八、动手写实例九、发布与真机调试 写在前面1. 什么是React-Native? React-Native是:Faceboo转载 2017-06-21 10:10:19 · 979 阅读 · 0 评论 -
iOS常用的第三方
分类:UI(38) 目录(?)[+]转自:http://blog.csdn.NET/u010098724/article/details/52302308下拉刷新EGOTableViewPullRefresh – 最早的下拉刷新控件。SVPullToRefresh – 下拉刷新控件。MJRefresh – 仅需转载 2017-06-19 11:43:50 · 5704 阅读 · 0 评论 -
iOS搜索框样例
每个App的搜索界面下边都会有热门搜索,历史搜索之类的标签,这里介绍个框架,既可以非常容易实现标签类的不规则流式布局,也可以实现固定宽度和高度的布局,也支持Autolayout,使用起来也是非常舒服。SKTagView原框架下只有根据文字宽度不固定的的模式,那么如果需求有固定宽高模式的,老规矩,只能改源码了.请看图:传统模式:原创 2017-06-19 14:52:16 · 1390 阅读 · 0 评论 -
xib自动布局介绍
目录(?)[+] 使用Xib可以实现控件的屏幕适配,但是并不是十全十美。因为我们使用Xib添加约束的时候,比如说距离左边多少距离,这是设置的一个确定的阿拉伯数字,是绝对的,并不是设置的一个比例,在不同的机型上面,设备的尺寸宽高不一定,Xib以绝对的阿拉伯数字添加约束并不能做到完美的屏幕适配,但是!!!大体还是可以的。 功能按钮介绍:转载 2017-06-28 16:39:40 · 460 阅读 · 0 评论 -
APP加急审核
APPstore的加急审核申请,由于公司老板或者客户比较急,你可以把你的 正在等待审核的APP添加一个加急审核申请。但是有一个前提是,你已经提交了你的APP正在等待审核中才可以。当然这个审核申请不一定有效,因为你的理由不一定被苹果采纳,但是一经采纳,那审核效率是很给力的。但是一个应用的加急审核次数好像也是有限的,你得悠着点来,申请加急网址:https://developer.apple.com/a原创 2017-06-28 16:52:02 · 415 阅读 · 0 评论 -
iOS简单的瀑布流实现
前言超简单的瀑布流实现,这里说一下笔者的思路,详细代码在这里。效果演示实现思路collectionView能实现各中吊炸天的布局,其精髓就在于UICollectionViewLayout,因此我们要自定义一个layout来继承系统的UICollectionViewLayout,所有工作都在这个类中进行。1.定义所需属性瀑布流的思路就是,从上往转载 2017-06-19 17:10:13 · 825 阅读 · 0 评论 -
runtime简单使用
前言在开始之前建议先阅读iOS runtime的基础理解篇:iOS内功篇:runtime有筒子在面试的时候,遇到这样一个问题:“你知道成员变量的本质是什么吗?”,筒子立马懵逼了,成员变量的本质?成员变量就是成员变量啊,平时只管用,还有什么更深层的含义?本文着重介绍runtime中成员变量和属性的定义和使用。名词解析成员变量1、定义:Ivar: 实例变原创 2017-06-20 15:02:24 · 287 阅读 · 0 评论 -
iOS编译项目的速度优化
前言贝聊目前开发的两款App分别是贝聊家长版和贝聊老师版,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万。现在打包一次耗时需要11~12分钟。虽然还远远比不上 Facebook 的40分钟,但是我们在内测的时候,经常一天要发布内测版两到三次。打包时CPU占用基本上是百分百的,因为没有专门的 CI转载 2017-06-29 17:19:52 · 835 阅读 · 0 评论 -
获取iOS应用信息
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[-]iOS 私有 api 的使用获取所有安装程序极其信息打开对应bundle id 的应用查看所有 url schemes由于苹果的限制,在未越狱的 iOS 设备中只能通过私有 api 来获取安装应用列表和所有的 url scheme,在 ios 中可以用获取到的 scheme转载 2017-06-29 17:35:22 · 2170 阅读 · 0 评论 -
UI调试神器Reveal的使用
Reveal的使用与破解镇楼图移动开发这一块做的最多的无疑就是UI和交互,而UI调试也是移动开发人员经常干的一苦逼事。虽然目前iOS开发工具Xcode集成了UI调试功能(Debug View Hierarchy),但带给我们的却只有失望。接下来就如标题所见,笔者来简单介绍和使用Reveal,因为这东西使用起来并不难,所以着重讲解怎么集成到工程里。但是...这个工具是收费的,不过还好我们在天朝(你...原创 2018-04-14 15:49:57 · 363 阅读 · 0 评论 -
iOS 常见的商品详情页布局
#pragma mark -Life Cycle-(void)dealloc{ [self removeObserver];}- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.titleView = self.segmentedView; [self initDefault]; [self i...原创 2018-04-18 10:45:37 · 5083 阅读 · 5 评论 -
IOS-组件化的好处
前言为什么要组件化随着项目的不断迭代,各个模块会越来越复杂,各个模块相互依赖,而且每个模块可能会有共同的业务逻辑,导致整个项目维护起来比较麻烦。可以采用组件化,把每个业务逻辑和模块分离,单独管理,这样比较方便维护,各个开发人员只需要关心好自己的模块就好了。组件化好处分工更加明确,提高开发效率复用性更好,能迅速的组成更多的App组件化思想就好比封装控件,复杂的控件一般都会封装,组件化只不过是把每个模...转载 2018-06-27 11:00:48 · 2246 阅读 · 0 评论 -
ios组件化漫谈
近期随着项目需求越来越多,着手对项目进行业务划分,思考如何提高团队开发效率,就想到了组件化这个话题,这里来分享一下自己的梳理和思考。首先组件化的好处,我就不用多说了,直接进入主题;回到组件化的技术方案,最早上Limboy分享的一遍文章蘑菇街组件化(MGJRouter),接着Casa提出了不同的意见(CTMediator),后来Limboy在Casa的意见上做了进一步优化,最后Bang在前...原创 2019-08-12 15:35:24 · 206 阅读 · 0 评论 -
IOS开发之-人脸识别
1、体验分析首先思考的应该是人脸识别登录的流程。本人第一次体验到的人脸识别技术的应用当然是支付宝。支付宝开启人脸登录流程:首先是账号密码登录---->然后在app内根据提示完成信息采集---->信息采集完成后下次登录时就可以使用该功能了!然后又找到另一款带有人脸识别登录功能app应用,其开启流程:账号密码登录后 ----> 在相关功能模块调用相机,拍摄较清...转载 2019-03-25 14:54:51 · 2191 阅读 · 0 评论 -
针对IOS Cookies的解析
Cookie1、什么是CookieCookie是由服务器端生成,发送给User-Agent(一般是浏览器或者客户端),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站地址时就发送该Cookie给服务器。Cookie必然会通过HTTP的Respone传过来,并且Cookie在Respone中的HTTP header中。为什么需要Cookie?H...原创 2019-03-25 14:53:03 · 543 阅读 · 0 评论 -
YYModel的深入理解
文件结构 相信使用过MJExtensions的iOS开发者来说,接触YYModel并不是很陌生,因为两者在某些思路上是相似的,例如都用了category的方式来实现,Protocol中的方法都有着相似的功能,例如黑白名单、Property名称和dictionary中key中的对应关系等。YYModel的文件包括:YYModel.h YYClassInfo.h、YYClassInfo....原创 2019-03-09 14:44:35 · 1960 阅读 · 0 评论 -
MBProgressHUD的讲解
MBProgressHUD是一个为 APP添加 HUD窗口的第三方框架,使用起来极其简单方便,关于 MBProgressHUD的使用方法,GitHub上有详细的说明,这里就不多加介绍了,本文主要是从源码的角度分析 MBProgressHUD的具体实现。先来对 MBProgressHUD有个大体的认识,这是刚从 GitHub上拉下来的代码,如下图,MBProgressHUD 的主要文件只有两...转载 2018-12-25 11:04:01 · 6734 阅读 · 0 评论 -
Objection源码解析
一、简介Objection是一个iOS中轻量级的对DI及IoC的实现,不知道DI及IoC的请移步至iOS组件通信方案,Objection只有Object-C版本,没有Swift版本,如果你想在Swift中使用这种容器框架,可以了解下Typhoon,二者对于DI的实现方式不同,原理也不同,本篇文章主要分析Objection。它的优点有哪些呢?支持我们进行面向接口编程,有利于项目解耦(组件...转载 2018-11-03 16:04:53 · 567 阅读 · 0 评论 -
IOS原生生成二维码
一、二维码的生成从iOS7开始集成了二维码的生成和读取功能 此前被广泛使用的ZBarSDK 目前不支持64位处理器,除此之外还有ZXingSDK也可以生成二维码生成二维码的步骤 导入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字) 纯文本 名片 URL(可直接跳转网页) 二维码生成的具体代码-...原创 2018-10-23 15:13:26 · 433 阅读 · 0 评论 -
ios 防止button重复点击
话不多说,直接上代码#import <UIKit/UIKit.h>@interface UIButton (MPK)@property (nonatomic, assign) NSTimeInterval eventTimeInterval; @end #import "UIButton+MPK.h"#import <objc/runtime.h&...原创 2018-08-09 10:35:45 · 442 阅读 · 1 评论 -
提高iOS开发效率
本文将从以下几方面介绍:Xcode常用快捷键Xcode调试技巧Objc常用代码片段Xcode插件Mac工具1. Xcode常用快捷键导航快捷键command+1-8:打开 Project/Symbol/Find/Issue/Test/Debug/Breakpoint/Log 导航栏command+0:显示/隐藏 左原创 2015-08-13 22:08:54 · 855 阅读 · 0 评论 -
iOS开发表格操作
1.实现单元格的删除,实现效果如下 Cpp代码 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @"编辑"; self.navigation.rightBarButtonIt转载 2015-12-15 15:19:40 · 413 阅读 · 0 评论