iOS功能块
文章平均质量分 75
Lu_Ca
每天一小步。。
展开
-
包体积瘦身方案与实施
在2019谷歌开发者大会上,谷歌给出了一个很详细的数据,包体大小每上升6MB,应用下载转化率就会下降1%。不同地区转化率略有差异,APK包体大小每减少10MB ,全球平均下载转化率会提升1.75%,新兴国家代表印度和巴西下载转化率提升2.0%以上,高端市场代表美国和德国下载转化率提升1.5%。分析安装包的构成先把ipa包后缀改成zip然后解压打开,Payload里的app包,查看里边内容。原创 2023-02-06 11:08:45 · 537 阅读 · 0 评论 -
WKWebView之离线加载以及遇到的问题
利用WKURLSchemeHandler拦截网络请求,实现离线包加载。原创 2022-07-11 18:14:40 · 5434 阅读 · 8 评论 -
YUV转UIImage
YUV转UIImage原创 2022-04-06 15:21:02 · 745 阅读 · 0 评论 -
读SDWebImage源码笔记
SDWebImage最大并发个数:6。 默认下载超时时间 :15s。 默认缓存时间: 一周。1、SDWebImage 下载过程 【其中包括 SDWebImage 缓存策略(二级缓存策略)】imageView sd_setImageWithUrl:placeholder:options:context:progress{}completed{}最外层是一个SDWebImageManager单例,管理着另外两个单例,一个是下载的SDWebImageDownloader,它管理着多个下载操.原创 2021-03-26 15:26:34 · 516 阅读 · 0 评论 -
利用RAC实现验证码发送逻辑
前言项目中手机验证码登录和注册等页面都有发送验证码的需求。之前一直在使用自己创建定时器来做相应的处理,这段时间在看RAC相关方面的东西,正好看到定时器符合之前的一些设计场景,简单实现一下。导入RAC我练手的项目是Objective-C的项目,所以之前在podfile文件中加入pod ‘ReactiveObjC’, ‘~> 3.0.0’,直接pod install然后,在需要的页面导入头文件#import "ReactiveObjC.h"。具体代码#import "ViewCo原创 2021-03-22 14:25:31 · 328 阅读 · 0 评论 -
autoreleasepool问题汇总
AutoreleasepoolPage调用autorelease对象最终都是通过AutoreleasepoolPage对象来管理的。AutoreleasepoolPage对象的结构如下Next:指向最新添加的autorelease对象的下一个位置,也就是第一个可以用的位置。thread:当前的线程。parent:指向父节点,第一个节点的parent是nil。Child:指向子节点,最后一个节点的child指向nil。Depth:表示深度。magic:用来校验Autorelease原创 2021-03-09 11:15:17 · 549 阅读 · 0 评论 -
YYModel内部实现原理
YYModel作为开发过程中模型转换框架,为JSON与数据模型之间的相互转换,提供了高性能的解决方案。之前一直听别人说,YYModel内部实现是KVC进行的属性赋值。也认为是合理的,但是今天查看源码发现,里边其实并不是采用的setValue:forKey:的方式进行赋值的。而是采用了objc_msgSend方法调用了属性的setter方法进行赋值的。以后,跟别人说YYModel里可别再说是KVC了,一看就没有看过源码。下边粘一句赋值源码case YYEncodingTypeNSMutableStr原创 2021-03-08 15:32:05 · 1310 阅读 · 0 评论 -
解读AFNetworking4.0请求原理
简介AFNetworking4.0 是对NSURLSession的封装,之前版本有NSURLConnection的封装,现在已经被废弃。简单聊一下,为啥AF要弃用之前的NSURLConnection封装,改成对NSURLSession封装。首先,NSURLSession是在iOS7.0的时候苹果推出来的。而NSURLSession又能支持Http2.0的。大家都知道Http是基于TCP协议的,早期的Http是短连接的,每次传输数据都需要重新连接,而每次连接的话需要进行三次握手,这就造成了资源以及原创 2021-03-08 11:12:31 · 1340 阅读 · 0 评论 -
解读CFRunLoopRef源码
平时开发中我们接触的NSRunLoop比较多。但是,NSRunLoop的api不是线程安全的,所以在一个NSRunLoop中操作另一个NSRunLoop时要格外小心。其中CFRunLoopRef是线程安全的,而且NSRunLoop只是对CFRunLoop的封装。所以,我们可以通过分析CFRunLoop的源码工作原理,来了解NSRunLoop的原理。 苹果已经对CoreFoundation代码开源,我们可以找到CFRunLoop的源码来分析。源码在这里CFRunLoop入口...原创 2021-03-05 15:10:41 · 458 阅读 · 1 评论 -
消息转发机制--拯救你的程序崩溃
前言:之前一直有了解iOS中的消息转发机制,一直没有总结过。这篇文章就当是对之前碎片知识的总结吧。主要涉及到了runtime的消息传递和如果没有找到对象的方法,系统为我们提供的三次拯救机会。废话不多说,直接进行正文。Runtime的消息传递我们都知道OC是一门动态语言。OC语言并不能直接被计算机所识别。需要先转换成C语言,然后转成汇编语言,最后转成计算机认识的机器语言。当我们调用一个对象的方法[objc foo]时,编译器会将代码进行转换成消息发送objc_msgSend(objc f.原创 2021-03-04 14:03:28 · 355 阅读 · 1 评论 -
iOS给readonly属性进行赋值
我们都知道iOS中,是不能通过点方法或者[]方法进行readonly属性的赋值的。如果你执意要调用,那么Xcode会报错,readonly属性是不支持赋值操作的。那么,我们有其他办法给这个readonly的属性赋值吗?这里先写结论,可以。通过KVC的setValue:forKey方法可以给这个属性赋值。这里就涉及到了KVC的知识点了,先说一下KVC的setValue:forKey方法的基本原理吧。第一步:会查找对象的类中是否有满足set<key>格式的方法。如果有,那么直接调原创 2021-03-04 10:13:27 · 1640 阅读 · 1 评论 -
iOS对ipa包进行代码混淆《二》 ---代码混淆
接上一篇文章ipa包砸壳,接下来讲一下代码混淆。混淆代码,我们需要生成两个文件confuse.sh和func.list。confuse.sh是一个脚本文件,里边定义了混淆的一些算法,以及需要混淆方法的路径。func.list是我们列举的一些需要混淆的方法。当然系统的方法不能混淆,不然一些库文件方法没办法正确加载。1、首先,终端cd到文件目录,并且利用指令touch生成这两个文件touch confuse.shtouch func.list不出意外,文件目录里已经有这两个文件了。原创 2021-02-22 17:56:02 · 1452 阅读 · 1 评论 -
iOS对ipa包进行代码混淆《一》 ---砸壳破解
前言:iOS开发中平时很少谈及对项目进行加密操作处理,当然可能是一般的项目安全系数要求并没有那么高。之前有过一个项目经历,被人恶意使用手机验证码,刷掉不少短信费用。当然,问题可能出在Android端,姑且不说是哪一端。既然事情发生了,iOS端也就将项目的加密提上了日程。当然,由于才疏学浅,我只是对项目做了初级的代码混淆。先记录一下,怎么通过ipa包来获取到项目中把存储在mach-O文件的@interface和@protocol信息提取出来,并生成对应的.h文件。这里我们需要借助一个工具Class-dum原创 2021-02-22 16:36:01 · 2386 阅读 · 7 评论 -
自定义面包屑导航
引申:面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现在沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑导航的作用是告诉访问者他们目前在网站中的位置以及如何返回。先看效果图iOS开发过程中是没有这样一个控件可以使用的,所以只能自己造轮子了。简述一下思路:顶部导航其实就是一排自定义的按钮,点击了目录后增加这排导航的按钮,点击了导航按钮就把这个按钮后边的按钮移除。原创 2020-12-24 17:32:52 · 488 阅读 · 0 评论 -
UIDocumentPickerViewController获取本地文件
项目需要用户可以上传自己的一些ppt,doc,pdf文档等。利用UIDocumentPickerViewController就可以帮助我们访问本地的文件达到上传的目的。需要让iOS程序支持iTunes文件交换需要在程序的Info.plist里增加一个键:UIFileSharingEnabled(Application supports iTunes file sharing),赋值YES。然后就是代码操作了。首先初始化UIDocumentPickerViewController// 项目支原创 2020-11-04 15:37:46 · 2961 阅读 · 0 评论 -
利用贝塞尔曲线完成自定义绘图,带有橡皮功能
先说下具体的功能,包括画笔的绘画,颜色的变化,透明度的设置。以及清屏和橡皮擦对一个路径的擦除功能。首先,定义了一个绘画的类LCSStroke,里边声明了一些画笔的属性,例如绘画的路径,颜色,画笔的宽度等。直接上代码LCSStroke.h代码#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>NS...原创 2019-12-02 17:30:41 · 703 阅读 · 0 评论 -
iOS项目集成bugly管理
首先需要在bugly里创建应用,具体不赘述,主要是记录配置过程。项目中用pod管理三方库,所以此处只记录pod管理过程,命令行进入项目路径,vim Podfile然后按i进入编辑模式,添加pod 'Bugly',ESC退出编辑模式wq保存。然后执行pod install,安装bugly的库。既然用bugly来管理线上的崩溃,那么你要配置xcode的符号表,请在下边的链接中找到图中的ht...原创 2019-11-20 18:25:09 · 445 阅读 · 0 评论 -
UIBezierPath精讲
学习UIBezierPath画图笔者在写本篇文章之前,也没有系统学习过贝塞尔曲线,只是曾经某一次的需求需要使用到,才临时百度看了一看而且使用最基本的功能。现在总算有时间停下来好好研究研究这个神奇而伟大的贝塞尔先生!笔者在学习时,首先看了两遍UIBezierPath类头文件定义,熟悉了一下相关的属性和方法。基础知识使用UIBezierPath可以创建基于矢转载 2016-07-01 11:26:30 · 547 阅读 · 0 评论 -
iOS 应用程序内切换语言 中英文切换
iOS 应用程序内切换语言 中英文切换 标签: iOS程序内部国际化iOS程序内切换语言中英文切换iOS语言切换english2014-01-15 10:22 824人阅读 评论(0) 收藏 举报 分类: iOS集锦(17) 前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 –今天要讲的转载 2016-02-02 15:24:00 · 6182 阅读 · 1 评论 -
iOS应用程序内购/内付费(一)
很久之前就想出一篇IOS内付费的教程,但是一查网上的教程实在太多了,有的写得真的蛮不错的,就心想算了,于是就保存在草稿箱了。至于为什么写完它呢!真是说来话长,最近公司有个项目经理跑来问我有关苹果内付费相关的细节,跟他聊了半天,从项目对接苹果官方支付接口聊到了如何查看App收益,最后终于使他有了一些眉目,但是悲催的是还要我继续去跟他们项目的程序员讲解(真是疯了),所以我就决定给他们项目写一个内购的文转载 2016-08-30 14:35:51 · 998 阅读 · 0 评论 -
iOS10版Siri API仅面向六类第三方应用开放
【天极网IT新闻频道】据外媒报道,Siri将在iOS10中开放API(应用程序接口),允许第三方应用整合Siri语音助手体验。这种整合能够大大提升Siri的实用性,但需要注意的是,苹果的Siri API整合机制有诸多限制。 对于iOS 10,Siri API将仅仅支持六类应用程序:打车(如Uber)、通讯、照片搜索(在特定应用中寻找照片和视频)、支付(如“用SquareCash’给约翰转账1转载 2016-06-23 15:51:30 · 3980 阅读 · 0 评论 -
iOS Siri的语言识别程序的开发与实践(Nuance技术)
iOS Siri是一个非常强大的功能,可以自动进行语言识别了,下面我们来借助于它开发一个语言识别程序,下面是一个简单实例,有兴趣的同学不防进入参考。相信Iphone4s之后Siri技术又火了一把,不过Siri的成功除了归于苹果公司Steve Jobs的领导之外,Siri的语音识别技术提供商Nuance公司的才是功不可没的。Nuance是最大的专门从事语音识别软件、图像处理软件及输入转载 2016-06-23 15:48:42 · 6749 阅读 · 0 评论 -
iOS自iOS8.0出的指纹解锁api
引入头文件#import - (void)viewDidLoad { [superviewDidLoad]; self.view.backgroundColor = [UIColorredColor]; 用一个点击屏幕事件唤起指纹验证的请求 UITapGestureRecognizer原创 2016-06-21 16:06:34 · 1977 阅读 · 0 评论 -
使用苹果原生API进行二维码和条形码的扫描
使用苹果原生API进行二维码和条形码的扫描 标签: iOS原生条形码二维码2016-04-05 11:26 8人阅读 评论(0) 收藏 举报 分类: iOS(3) 版权声明:本文为博主原创文章,未经博主允许不得转载。最近需要用到二维码的扫描,发现苹果有自己的原生的api,这里简单介绍一下.首先需要引入AVFoundation.转载 2016-04-05 11:42:41 · 1234 阅读 · 0 评论 -
27个iOS开源库,让你的开发坐上火箭吧
本文翻译自Medium,原作者是Paweł Białecki,原文27个iOS开源库,让你的开发坐上火箭吧你不会想错过他们,真的。我爱开源。并且我喜欢开发者们,把他们宝贵的私人时间用来创造神奇的东西,然后他们会和其他人分享并且不求回报。开源作者和贡献者,你们是最帅的。感谢你们一直以来的工作。所以,因为我是一个分类整理狂,这是我从iOS开源库中选出转载 2016-07-04 14:24:52 · 1544 阅读 · 0 评论 -
高效开发iOS -- 那些不为人知的KVC
valueForKeyPath本篇来讲解一下那些不为人知,也经常被忽略掉,并且很实用的KVC干货小技巧获取数组里的,最大、最小、平均、求和 NSArray *array = @[@"1",@"3",@2,@9.5,@"1.2"]; NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"]; NS转载 2016-06-16 14:14:41 · 493 阅读 · 0 评论 -
iOS推送pem文件的生成
1、首先登陆到开发者中心证书设置页面,https://developer.apple.com/account/ios/certificate/create/2、我之前已经有一个证书,需要把这个证书添加上推送的功能,所以需要编辑证书,点击identifiers下边的App IDs选择要编辑的app id,我这个是PushDemoTest,点击之前Push Notifications后边的disa原创 2017-09-21 09:02:02 · 560 阅读 · 0 评论 -
学习 RunLoop
修正一点: 根据源码,runloop要跑起来先判断mode是否为空,如果为空退出,然后判断source0是否为空,如果为空退出,然后判断source1是否为空,如果为空退出,然后判断是否有timer,如果没有就退出,并没有判断是否有observer,所以runloop如果要跑起来,必须有source或者timer的其中一个源码如下:static Boolean __CFRunLoopMod转载 2017-12-08 17:35:39 · 416 阅读 · 0 评论 -
ios推送机制
APNS的推送机制与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs: 这里 Provider 是指某个应用的Developer,当然如果开发者使用AVOS Cloud的服务,把发送消息的请求委托给我们,那么这里的Provider就是AVOS Cloud的推送服务程序了。上图可以分为三步:第一步:转载 2015-05-20 08:47:06 · 955 阅读 · 0 评论 -
iOS中关键字copy与mutableCopy的详解,看我你就都懂了
对于有一定iOS开发经验的同学来说,对于copy关键字一定不陌生,从字义上来看,应该就是复制一个对象,然后我们对于NSString类型的属性,一般也用copy关键字。但是大家对于copy关键字真正有什么具体了解呢,什么时候用copy,什么时候用mutableCopy,区别又在哪里,对于内存存储上又有什么知识点,我相信还有一部分同学一知半解。秉着钻研探索的精神,我们来详细的学习一下。首先我们先说...转载 2018-10-18 10:01:19 · 478 阅读 · 0 评论 -
performSelector和传递参数
performSelector和直接调用方法的区别performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。所以performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发...转载 2018-09-12 09:33:17 · 5919 阅读 · 0 评论 -
iOS马甲包
马甲包的字面意思给产品穿马甲,但是我认为马甲包更像是产品的一种分身,一种和产品一样拥有灵魂,拥有肉身的一种分身。它能为产品带来同样的功能效果。iso马甲包是什么意思?如何制作上传 如图所示,喜马拉雅马甲包一、什么是马甲包马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法。马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基...转载 2018-07-19 15:18:33 · 903 阅读 · 0 评论 -
iOS 图片加载框架-SDWebImage 解读
在 iOS 的图片加载框架中,SDWebImage可谓是占据大半壁江山。它支持从网络中下载且缓存图片,并设置图片到对应的 UIImageView 控件或者 UIButton 控件。在项目中使用 SDWebImage 来管理图片加载相关操作可以极大地提高开发效率,让我们更加专注于业务逻辑实现。SDWebImage 概论1.提供了一个 UIImageView 的 category 用来加载网络图片并且...转载 2018-07-06 10:04:11 · 316 阅读 · 0 评论 -
基于runloop的线程保活、销毁与通信
首先看一段AF2.x经典代码:+ (NSThread *)networkRequestThread { static NSThread *_networkRequestThread = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _net...转载 2018-07-18 09:18:23 · 401 阅读 · 0 评论 -
使用dispatch_group来进行线程同步
一、简单介绍下将会用到的一些东西英语不好就不翻译官方文档了..1、dispatch_group_async* Submits a block to a dispatch queue and associates the block with the given* dispatch group//将一个block(代码块)加入到dispatch_queue_t queue中并和dispatch_...转载 2018-06-01 14:32:57 · 936 阅读 · 0 评论 -
dispatch_barrier_async、dispatch_apply、dispatch_block_notify、dispatch_group_notify
1、dispatch_barrier_asyncdispatch_barrier_async用于等待前面的任务执行完毕后自己才执行,而它后面的任务需等待它完成之后才执行。一个典型的例子就是数据的读写,通常为了防止文件读写导致冲突,我们会创建一个串行的队列,所有的文件操作都是通过这个队列来执行,比如FMDB,这样就可以避免读写冲突。不过其实这样效率是有提升的空间的,当没有更新数据时,读操作其实是可以...原创 2018-06-14 14:01:37 · 718 阅读 · 0 评论 -
iOS新特性: iOS10.3教你如何动态更换APP图标
1、iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个:[objc] view plain copy[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^( }]; 这是官方文转载 2017-12-26 17:18:20 · 4180 阅读 · 0 评论 -
iOS工程中创建并使用SDK
iOS工程中创建并使用一个SDK,俗称.a文件创建一个静态库工程 打开Xcode,点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程.将工程命名为LCSConnectLib,然后将工程保存到一个空目录下。一个静态库工程由头文件和实现文件组原创 2016-06-12 16:30:02 · 2765 阅读 · 0 评论 -
分分钟解决iOS开发中App启动广告的功能
分分钟解决iOS开发中App启动广告的功能allluckly.cn前不久有朋友需要一个启动广告的功能,我说网上有挺多的,他说,看的不是很理想。想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告。依赖SDWebImage主要用来下载网络的广告转载 2016-06-12 13:32:43 · 11420 阅读 · 1 评论 -
ios中陀螺仪CoreMotion的用法
ios中陀螺仪CoreMotion的用法 (2014-04-22 10:23:14)标签: it分类: ios编程转自:http://code.eoe.cn/471/title/ios涓檧铻轰华CoreMotion鐨勭敤娉README.md 外部引用 原始文档以前在iphone中要得到加速度时,只能使用A转载 2015-06-24 10:32:51 · 1586 阅读 · 0 评论