ios
ivolcano
努力努力再努力
展开
-
iOS APNs推送常见问题
此文章主要总结对自己在维护推送SDK过程中的经验总结。但是只针对APNs进行总结,自建通道属于公司隐私,如有不同的意见欢迎补充,大家一起探讨。一、推送消息没收到1.1 客户端排查检查设备通知设置,查看自己的应用是否打开了推送消息权限。 检查设备网络设置,有两部分原因:(1)设备网络异常,可能导致客户端在注册APNs时获取消息的标识失败,这将导致APNs服务器无法给指定设备推送消息。...原创 2019-05-20 14:04:55 · 2497 阅读 · 0 评论 -
MVVM架构设计文档
摘要这篇文档主要讲解MVVM架构的具体设计,分别有层级划分、层级职责和层级之间的通信,层级内的模块划分、模块职责和模块之间的通信,模块内使用的设计模式和设计模式的使用场景。作为程序设计的准则和规范,并为以后的框架改进提供参考。设计目标架构设计按优先级需要达成以下目标:层级、模块之间的低耦合性 逻辑层的复用性 逻辑层的高度灵活性,可快速应对需求变化,达到可用逻辑模块的拼装完成一个...原创 2019-05-12 20:12:26 · 3201 阅读 · 0 评论 -
GCD基本使用总结
1.GCD的基本使用1.1 同步执行 + 串行队列总结:所有任务都是在主线程完成的,证明了同步执行不具备开启新的线程。所有任务都是按序执行。1.2 同步执行+并发队列总结:所有任务都是在主线程中执行的,没有开启新的线程,也就是说同步不具备开启新线程的能力。虽然并发队列可以同时执行多个任务,但是当前只有一个线程,一个线程只能执行一个任务,所以这里也就不存在并发队列。...原创 2019-05-04 22:26:15 · 2082 阅读 · 0 评论 -
iOS main之前发生了什么
目录编译预处理词法分析语法分析语义分析中间代码生成链接签名生成签名验证签名装载虚拟内存创建虚拟内存空间建立程序与虚拟内存的映射关系把 CPU 的 PC 设置为进程入口Mach-O 文件的加载Mach-O 文件格式dyld 加载一、基于DYLD_PRINT_STATISTICS 的分析分析方法编译预处理...原创 2019-05-01 18:58:11 · 312 阅读 · 0 评论 -
UIScrollView的Autolayout问题
UIScrollView本质上是简单的,通过frame指定了视窗的位置大小,通过contentSize指定了内容的大小(可滚动的区域)。Autolayout本质上也是简单的,通过指定相对和绝对量,控制UI组件的位置和大小。这两个本质上简单的东西碰撞到一起后,产生了可怕的火花。首先,contentSize的概念隐藏了,我们也不愿意去计算实际的size去指定scrollview的conte...原创 2019-04-22 09:40:42 · 264 阅读 · 0 评论 -
OAuth1.0 和OAuth2.0的区别
一、为什么出现OAuth?OAuth是一个开放的标准,在移动、web平台能提供一种安全地API授权,使第三方应用不需要密码账号通过授权的方式就可以进行登录。要解决的问题:打破传统的账号密码登录登录方式,不管是对于用户还是应用提供商,都能安全保障账号数据不被泄露。二、OAuth1.0 (-2012.4.20)1请求request code 和 access token过程中,得...原创 2019-05-21 20:25:34 · 8298 阅读 · 1 评论 -
无用图片扫描、删除脚本(Python)
使用Python开发检查脚本,原理是:1. 首先扫描所有特定后缀( '.png', '.jpg', 'jpeg' , '.imageset')等格式的图片文件 或 图片文件夹,获取文件名,存入 allImageFiles 数组中;2. 扫描所有代码文件,逐行分析,若有引用 allImageFiles 内图片文件文件名的字符串,则将该字符串对应的图片文件列为有用图片,存入 usedImage...原创 2019-06-04 21:18:09 · 781 阅读 · 0 评论 -
包大小治理总结
目录一、图片资源1.1 清理无用图片1.2清理重复图片1.3压缩图片大小二、代码瘦身2.1 找寻无用代码RealizeClass 的实现RealizeClass的调用时机如何遍历所有的类?Class & MetaClass小结这是我个人的经验总结,如有更好的意见大家一起交流哈,共同进步。为什么要管理包大小?相信iOS开发者们都知...原创 2019-05-29 13:39:07 · 680 阅读 · 0 评论 -
MVVM+RAC总结
目录一、什么是MVVM二、为什么使用MVVM三、RAC3.1 RAC的用法四、RAC与MVVM架构设计的优点五、MVVM + RAC5.1 MVVM使用指南5.2 RAC坑一、什么是MVVMMVVM(Model - View/ViewController - ViewModel)是对MVC的一种变形设计模式,解决ViewController代码臃肿、View...原创 2019-06-01 11:07:05 · 2753 阅读 · 0 评论 -
工作中遇到的crash总结
目录async-signal-safe异常C++ 异常Objective-C访问非对象内存objc_msgSend 内部 crash访问被释放的对象SIGBUS 信号物理地址不正确物理地址未对齐SIGSEGV 信号空指针执行没有执行权限的内存向只读内存进行写操作栈溢出SIGILL执行特权模式指令执行未定义指令SIGT...原创 2019-06-05 20:25:43 · 1525 阅读 · 0 评论 -
WWDC
2017 WWDC让我印象最深的就是Xcode 9的匠心、吊炸天的Core ML和VR编译和索引速度就是一切Xcode 9的编译系统是用Swift重写的,编译速度有了很大的提升,同时索引系统也使用了新的引擎,超大项目中文件夹滑动FPS能达到60,代码搜索速度可最多提升50倍(Demo里有一个上w行的文件,寻找一个文件尾部的函数,瞬间就定位到了)2018 WWDC本届W...原创 2019-05-27 23:41:51 · 247 阅读 · 0 评论 -
2016WWDC-App Signing
目录2016WWDC401 - What's New in Xcode App Signing存在问题1.开发者无法专注于开发2.团队合作3.provisioning profile操作繁琐3.provisioning profile通过ID引用曾经的尝试1.Xcode7免证书真机调试新的方案1.自动签名(Automatic Signing)2.定制...原创 2019-05-27 21:11:37 · 174 阅读 · 0 评论 -
iOS 自建通道原理总结
目录1、背景2、设计流程图1.长连通道的建立与初始化2.网络长连接通道的稳定性如何保证(1) NAT超时断开长连通道的规避策略(2) DHCP 续租断开长连通道的规避策略(3) 重试3、pushSDK与pushServer建立连接过程3.1协议设计4、通信格式4.1 监控体系1、背景目前iOS已经有原生APNs推送服务,完全有苹果公司维护。对...原创 2019-05-26 13:50:08 · 605 阅读 · 0 评论 -
iOS 当前控制器
+ (UIViewController *)currentViewController{ UIViewController *frontUIViewController = nil; UIWindow *defaultWindow = [[UIApplication sharedApplication] keyWindow]; if (defaultWindow.win...原创 2019-03-16 18:40:41 · 322 阅读 · 0 评论 -
iOS 集合的深复制与浅复制
概念对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。再简单些说:浅复制就是指针拷贝;深复制就是内容拷贝。集合的浅复制 (shallow copy)集合的浅复制有非常多种方法。当你进行浅复制时,会向原始的集合发送retain消息,引用计数加1,同时指针被拷贝到新的集合。 现在让我们看一些浅复制的例子:NSA原创 2017-09-21 06:39:29 · 229 阅读 · 0 评论 -
OC中代理和通知的概念
代理*代理设计模式的作用: * 1.A对象监听B对象的一些行为,A成为B的代理 * 2.B对象想告诉A对象一些事情,A成为B的代理*代理设计模式的总结: *如果你想监听别人的一些行为,那么你就要成为别人的代理 *如果你想告诉别人一些事情,那么就让别人成为你的代理*代理设计模式的开发步骤: *1.拟一份协议(协议名字的格式:控件名+D原创 2017-06-06 10:21:44 · 481 阅读 · 0 评论 -
类方法前面为什么要用instancetype而不用id?
类方法经常出现在模型中,如下面:#import @interface LQFlag: NSObject@property (nonatomic, strong) NSString *name;@property (nonatomic, strong) NSString *dict;+(instancetype)flagWithDict:(NSDictionary *)dict;原创 2017-06-16 11:06:53 · 387 阅读 · 0 评论 -
理解objc_msgSend的作用
在对象上调用方法是Object-C中经常使用的功能。用Object-C的术语来说,这叫做“消息传递”。消息有“名称”或“选择子”,可以接受参数,而且可能还有返回值。由于OC是C的超集,所以最好先理解C语言的函数调用方式。C语言使用“静态绑定”,也就是说,在编译期就能决定运行时所应调用的函数。以下列代码为例:#import void printfHello() { printf(原创 2017-05-17 22:59:06 · 735 阅读 · 0 评论 -
Xcode编译常见错误解决:linker command failed with exit code 1 (use -v to see invocation)
今天做项目用cocoapods导入第三方框架YYModel后,编译原项目 .xcodeproj 一直出现library not found for YYModel,查看各种技术博客,大多数博客都说是Target -> Build Setting ->Library Search Paths 的绝对路径出了错误。然后跟着他们的步骤改,并没有解决我的问题。后来我看了一句话,就解决了,如下:I原创 2017-04-26 21:45:38 · 1866 阅读 · 1 评论 -
iOS 音乐播放器demo讲解
一.前言首先做一个项目我们最好先分析我们要做哪些功能,按功能模块一个个划分好结构。每个功能模块都有相对应的职责。切入正题,我做的这款音乐播放器,实现的是播放本地音乐。有以下几个要点: 1.如何实现播放音乐? 2.如何切换当前正在播放的音乐资源? 3.如何监听音乐播放器的各种状态(播放器状态,播放的进度,缓冲的进度,播放是否完成)? 4.如何手动监控播放进度? 5.如何在后台模式下或者锁屏模原创 2017-04-18 17:16:25 · 1118 阅读 · 0 评论 -
OC的常见术语整理
存取方法实例变量的取值或设值方法。使用取值方法可以获取实例变量的值,使用设值方法可以设置实例变量的值,这与数据封装的方法论是一致的。Application Kit用于开发应用程序用户界面的框架,用户界面包含各种对象,如菜单、工具栏和窗口。该框架是Cocoa的组成部分,通常称为AppKit。ARC自动引用计数,用于编译器进行对象内存管理的特性。归档将对象数据转换成一种以后可恢复(未归档)的格式。数组一原创 2017-05-24 13:19:16 · 2434 阅读 · 0 评论 -
Block外给self加上weak,那不就释放了吗
Apple 官方的建议是,传进 Block 之前,把 self 转换成 __weak 的变量,这样在 Block 中就不会出现对 self 的强引用。但是这样的话, Block 执行完成之前,self 被释放了,weakSelf 也会变为 nil。__weak typeof(self) weakSelf = self; dispatch_async(dispatch_get_global_q原创 2017-04-04 13:31:26 · 898 阅读 · 0 评论 -
UIView生命周期
问题:1.一个UIView的生命周期是怎样的?UIView生命周期的方法用在什么地方呢?2.通过IB和代码加载视图。有什么区别?视图的加载方式每一个UIViewController都维护和管理一个视图层次。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。UIViewCOntroller采用懒加载的方式,也就是说第一次访问到view属性时才会原创 2017-04-17 16:48:51 · 450 阅读 · 0 评论 -
pod install --no-repo-update
最近使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动原因在于当执行以上两个命令的时候会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。加参数的命令如下:pod install --verbose --no-repo-updatepod原创 2017-02-23 15:22:04 · 434 阅读 · 0 评论 -
使用cocoapods时常见的错误
错误一:当写在Podfile文件中的第三方框架,不能使用,找不到时,查看Pods文件夹,是否下载了所需的第三方框架,没有的话就pod update注意:无论是执行pod install 还是pod update都卡在了Analyzing dependencies不动。原因是在于当执行以上任意一个命令时候都会去升级CocoPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。加原创 2017-03-02 14:43:32 · 448 阅读 · 0 评论 -
笔记Effective objective-C 2.0之了解Objective-C
按个人理解,Objective-C是在C语言基础上添加了面向对象的特性。另外OC不像C语言使用“函数调用”,OC使用“消息结构”。那么这两种的关键区别是什么呢?思考片刻答案:使用函数调用的语言,则由编译器决定;使用消息结构的语言,其运行时所应执行的代码由运行环境来决定,总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型。接收消息的对象问题也要在运行时处理。,原创 2017-06-01 17:13:31 · 379 阅读 · 0 评论 -
Effective Object-C之属性
序言用Objective-C编程时,通过对象来存储并传递数据,在对象之间传递数据并执行任务的过程叫做“消息传递”。理解“属性”“属性”用于封装对象中的数据。OC对象通常把需要的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。而目前开发者可以令编译器自动编写与属性相关的存取方法。此特性引入了一种新的“点语法”,使开发者可以更为容易地依照类对象来访问存放于其中的数据。 哪些问题可以用属性来原创 2017-06-02 15:51:44 · 360 阅读 · 0 评论 -
initWithFrame、initWithCoder、awakeFromNib 和layoutSubviews
*当控件通过代码创建时,就会调用这个方法 *当控件通过代码创建时,想做一些初始化操作。应该在这个方法中执行- (instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { [self setup]; // 添原创 2017-06-03 15:16:38 · 440 阅读 · 0 评论 -
二叉树中两个节点的最低公共父节点
问题描述构建一棵二叉树(不一定是二叉查找树),求出该二叉树中某两个结点的最低公共父结点。借用一张图如下: 最低公共父结点的思路递归,首先从树根开始考虑:①结点A 和 结点B 要么都在树根的左子树中;②要么都在树根的右子树中;③要么一个在左子树中,一个在右子树中。这是一个分治算法,对于情况①和②,可以继续递归分解。对于情况③属于代码第10行判断,复杂度为O(1)递归表达式可表示为:T(N)=2T(N原创 2017-09-20 23:41:28 · 940 阅读 · 0 评论 -
iOS中HTTPS证书验证浅析
本文来自于腾讯Bugly公众号(weixinBugly),原文地址:https://mp.weixin.qq.com/s/-fLLTtip509K6pNOTkflPQ 我是带着一系列的问题,找到了这篇文章,很好地解答我的疑惑! 1.怎么抓HTTPS的包? 2.中间人攻击是什么?解决方案? 3.https通讯的话,代码怎么实现CA证书校验? 4.CA证书校验都有哪些类型可以检验 ?本文分原创 2017-09-18 11:35:57 · 1879 阅读 · 1 评论 -
带你看看GCD
简介谈到iOS多线程,一般都会谈到四种方式:pthread、NSThread、GCD和NSOperation。其中,苹果推荐也是我们最经常使用的无疑是GCD。GCD优点GCD是一套低层级的C API,通过 GCD,开发者只需要向队列中添加一段代码块(block或C函数指针),而不需要直接和线程打交道。GCD在后端管理着一个线程池,它不仅决定着你的代码块将在哪个线程被执行,还根据可用的系统资源对这些线原创 2017-09-17 23:00:24 · 449 阅读 · 0 评论 -
dispatch_barrier_async和dispatch_barrier_sync的区别在哪呢?
先看用dispatch_barrier_sync代码: 给的图里写的是dispatch_barrier_sync,因为我们需要先看看我们熟悉的等待——sync是什么效果,直接跑起来 ,看结果如下 可以看到,确实是1、2、3号任务并发执行完了,然后再执行我们dispatch_barrier_sync中的任务,再并发执行的4、5、6号任务,当然,point3和barrier之间是有明显停顿的,截原创 2017-09-17 19:04:35 · 1502 阅读 · 0 评论 -
AFNetworking的二次封装
重复请求问题 为了刷新数据或者加载更多数据,用户会触发上下拉刷新,当网络状态不好的时候,用户可能会不断地去刷新,这样会触发很多个重复的网络请求,回调逻辑会触发很多次,不作处理的话,不仅会浪费用户流量,还会造成数据错乱(数据列表存在很多重复的数据)。原有的AFNetworking没有提供直接的方法解决上面的问题,所以我在AFNetworking3.0的基础上做了一层封装,github 框架架构原创 2017-09-15 21:48:49 · 587 阅读 · 0 评论 -
iOS常用设计模式
设计模式简短的总结一.熟悉常用的设计模式最近看了一本《Objective-C编程之道关于iOS设计模式解析》,看完之后总结一下 【对象创建】 原型模式:对一个类进行复制创建一个新的对象 工厂方法:将具体产生什么类型隐藏起来,将产生什么类型交给子类决定。适用于只有一种类型的工厂 抽象工厂方法:多个工厂实现了同一接口或继承同一个类 单例模式:一个类仅有一个实例,同时提供一个访问该唯一实例的接口原创 2017-09-15 13:49:34 · 385 阅读 · 0 评论 -
扩大按钮UIButton的点击范围
首先,我们得继承一个UIButton,然后重写了按钮中的pointInside方法。 - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 这个方法,使得按钮热区不够44×44大小的先自动缩放到44×44,再判断触摸点是否在新的热区内。- (BOOL)pointInside:(CGPoint)point withEvent:(原创 2017-09-04 15:23:46 · 669 阅读 · 0 评论 -
iOS开发实战之Cookie注入
Cookie注入的使用场景:在开发中,我们常常会遇到这样一种场景:通过在一部分网络请求中注入Cookie信息让后台校验当前用户的登录状态以及用户权限在APP中打开一个需要登录用户才能看的页面,一般客户端会先判断是否登录,如果没有登录去登录。缺点每次都要判断,如果是付费内 容,还要引导用户去支付,这些都要去后台发起多个请求,去判断,增加了网络开销,如果逻辑处理的不够严谨,容易出错 Cookie的注入原创 2017-08-03 21:12:17 · 887 阅读 · 0 评论 -
集合深浅拷贝以及经常遇到的坑
引言根据拷贝内容的不同,分为深浅拷贝》深拷贝:指针赋值,且内容拷贝 》浅拷贝:只是简单的指针赋值苹果为什么这么设计呢?总结起来很简单:即安全又省内存。但是要理解或者避免踩一些坑,还需要看下面的介绍不得不先说到内存,又不得不说内存分区:程序底层——程序如何在RAM ROM运行,内存分配与分区 看下面图片: obj1是定义在函数外部的全局变量,处于全局区;obj2是定义在函数内的局部变量,处于原创 2017-08-03 20:04:25 · 291 阅读 · 0 评论 -
MVC、MVP和MVVM的比较
自己的总结:MVC即模型--视图--控制器架构模式很好地解决了页面中数据层、视图层、业务逻辑层(控制器)之间的耦合关系。使它们得到显性的区分,这也使得层次之间的耦合度降低。我们在开发中可以不用顾忌所有需求而专注于某一层次开发,降低了开发与维护成本。因此对于大型页面系统的开发,三个层次各司其职。每一层专注于自己的事情,有利于工程化‘模块化开发并管理代码;’MVP即模型--视图--管理器:Vi原创 2017-06-14 14:11:05 · 465 阅读 · 0 评论 -
Core Data的具体使用
一、概念1.Core Data 是数据持久化存储的最佳方式2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型在Mac OS X 10.5Leopard及以后的版本中,开发者也可以通过继承NSPersistentStore类以创建自定义的存储格式3.好处:能够合理管理内存,避免使用sql的麻烦,高效4.构成:(1原创 2017-01-11 14:28:02 · 309 阅读 · 0 评论