自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

XuShuangHui

记录一些平时的工作和学习资料

  • 博客(139)
  • 收藏
  • 关注

原创 Core Data

Core Data把表和OC对象进行的映射,底层还是用的Sqlite3进行存储的CoreData核心类与结构NSManagedObjectContext(数据上下文)对象管理上下文,负责数据的实际操作(重要)作用:插入数据,查询数据,删除数据,更新数据NSPersistentStoreCoordinator(持久化存储助理)相当于数据库的连接器作用:设置数据存储的名字,位置,存储方式,和存储时机N...

2018-03-21 16:34:40 208

原创

2018-03-21 16:34:22 195

原创 本地持久化方案

1.内存缓存1.苹果官方NSURLCache2.YYCache2.磁盘缓存1.NSUserDefault 小规模数据,弱业务相关数据2.keychain 是苹果提供的带有可逆加密的存储机制,普遍用在各种存密码的需求上3.文件存储Plist、archive、StreamPlist:一般结构化的数据或者需要方便查询的数据Archive:平时不太经常使用但很大量的数据,对象化的数据,Decode很花时间...

2018-03-21 16:33:58 322

原创 组件化

1.调用方式本地组件A在某处调用[[CTMediator sharedInstance] performTarget:targetName action:actionName params:@{...}]向CTMediator发起跨组件调用,CTMediator根据获得的target和action信息,通过objective-C的runtime转化生成target实例以及对应的action选择子,...

2018-03-21 15:17:24 196

原创 Hybrid 框架介绍

Hybrid交互设计Native调用前端页面的JS方法,或者前端页面通过JS调用Native提供的接口,两者交互的桥梁皆Webview:① NativeUI组件,header组件、消息类组件② 通讯录、系统、设备信息读取接口③ H5与Native的互相跳转,比如H5如何跳到一个Native页面,H5如何新开Webview做动画跳到另一个H5页面资源访问机制Native首先需要考虑如何访问H5资源,...

2018-02-27 11:47:53 3599

原创 网络层

概要网络层跟业务对接部分的设计网络层的安全机制实现网络层的优化方案当回调之后要做的任务在每次回调时都是一致的情况下,选择delegate,在回调之后要做的任务在每次回调时无法保证一致,选择block1.使用哪种交互模式来跟业务层做对接?以什么方式将数据交付给业务层?交付什么样的数据给业务层?(1)iOS开发领域有很多对象间数据的传递方式,我看到的大多数App在网络层所采用的方案主要集中于这三种:D...

2018-02-27 11:22:59 414

原创 dispatch_group_async、dispatch_semaphore_create

dispatch_group_async(group, dispatch_queue_create("com.dispatch.test", DISPATCH_QUEUE_CONCURRENT), ^{        // 设置一个网络请求        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWith...

2018-02-27 11:04:58 212

原创 MVC、MVVM简单介绍

MVCM应该做的事:给ViewController提供数据给ViewController存储数据提供接口提供经过抽象的业务基本组件,供Controller调度C应该做的事:管理View Container的生命周期负责生成所有的View实例,并放入View Container监听来自View与业务有关的事件,通过与Model的合作,来完成对应事件的业务。

2018-02-27 10:04:09 155

原创 性能优化2

内存泄露检测:1. Instruments工具:Leaks,Allocation.2. MLeakFinder工具。卡顿检测:1. 开发阶段可以用CADisplayLink,添加到runloop中.2. 线上监测,除了用第三方SDK之外,可以使用 “在子线程添加observer监测主线程”的方式.CPU使用率CPU的使用也可以通过两种方式来查看,一种是在调试的时候X

2018-01-22 10:53:05 198

原创 性能优化1

预排版当获取到 API JSON 数据后,我会把每条 Cell 需要的数据都在后台线程计算并封装为一个布局对象 CellLayout。CellLayout 包含所有文本的 CoreText 排版结果、Cell 内部每个控件的高度、Cell 的整体高度。每个 CellLayout 的内存占用并不多,所以当生成后,可以全部缓存到内存,以供稍后使用。这样,TableView 在请求各个高度函

2018-01-22 10:52:27 164

原创 iOS绘图—— UIBezierPath 和 Core Graphics

一、drawRect方法什么时候触发1.当view第一次显示到屏幕上时;2.当调用view的setNeedsDisplay或者setNeedsDisplayInRect:方法时。二、 六种绘图形式至此,我们有了两大绘图框架的支持以及三种获得图形上下文的方法(drawRect:、drawRect: inContext:、UIGraphicsBeginImageCo

2018-01-22 10:51:40 119

原创 循环引用

循环引用是iOS开发中经常遇到的问题,尤其对于新手来说是个头疼的问题。循环引用对App有潜在的危害,会使内存消耗过高,性能变差和Crash等,iOS常见的内存主要以下三种情况:1.Delegate代理协议是一个最典型的场景,需要你使用弱引用来避免循环引用。ARC时代,需要将代理声明为weak是一个即好又安全的做法:@property (nonatomic, weak) id

2017-12-25 15:54:50 295

转载 iOS 数据库迁移

0.安装 FMDBMigrationManagerPodfile 文件:platform :ios, "7.0"pod 'FMDB'pod 'FMDBMigrationManager'使用pod install命令安装1.FMDBMigrationManager 创建数据库FMDBMigrationManager *manager = [FMDBMigrationManager man

2017-12-25 15:48:13 447

原创 Runloop

NSDefaultRunLoopMode(kCFRunLoopDefaultMode):默认,空闲状态UITrackingRunLoopMode:ScrollView滑动时UIInitializationRunLoopMode:启动时NSRunLoopCommonModes(kCFRunLoopCommonModes):Mode集合日常开发中,与 runLoop 接触得最近可能

2017-12-22 15:56:14 142

原创 runtime如何实现weak变量的自动置nil?

runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为0的时候会 dealloc, 在这个 weak 表中搜索,找到所有以a为键的 weak 对象,从而设置为 nil。weak 修饰的指针默认值是 nil (在Objective-C中向nil发送消息是安全的)

2017-12-22 15:55:50 2192

原创 iOS 响应者链,事件的传递

事件传递的完整过程先将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件。 调用最合适控件的touches….方法 如果调用了[super touches….];就会将事件顺着响应者链条往上传递,传递给上一个响应者 接着就会调用上一个响应者的touches….方法如何判断上一个响应者如果当前这个view是控制器的view,那么控制器就是上一个响应者 如果当前这

2017-12-22 15:55:27 159

原创 load 和 initialize比较

1.load 在类或者类目被添加到runtime的时候加载一次,initialize是类第一次收到消息的时候被加载,load是在main函数之前,initialize是在main函数之后2.load方法的调用顺序是:superClass -> class -> category;initialize方法的调用顺序是:superClass -> class。都不需要显示调用父类的方法,系

2017-12-17 15:42:32 198

原创 isEqual

OC中的对象,都是用指针表示OC中方法的调用,是基于消息机制实现"==" / isEqualToString:"==" ,比较两个指针的值isEqualToString,比较两个字符串是否相同"==" / isEqual:"==" ,是判断两个对象的引用(reference)是否一样,也就是内存地址是否一样。isEqual ,判断是一个类方法,判断连个

2017-12-17 15:40:46 1381

原创 isa指针

isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteCl

2017-12-15 17:20:53 153

原创 Core Animation 之CAAnimation

CALayer层就是真正绘制UIView所要展示的东西CALayer是继承与NSObject的,所以他是不具备响应的。而UIView是继承与UIResponder的,UIResponder本身可以提供事件响应,再用CALayer给他绘制一个图像,那一个具有响应事件的对象就诞生了,他就是我们的UIView。CAAnimation通过他的4个子类,我们可以实现很多绚丽的动画效果。

2017-12-15 17:20:28 106

原创 检测iOS的APP性能的一些方法

首先如果遇到应用卡顿或者因为内存占用过多时一般使用Instruments里的来进行检测。但对于复杂情况可能就需要用到子线程监控主线程的方式来了,下面我对这些方法做些介绍:Time Profiler可以查看多个线程里那些方法费时过多的方法。先将右侧Hide System Libraries打上勾,这样能够过滤信息。然后在Call Tree上会默认按照费时的线程进行排序,单个线程中

2017-10-16 12:03:09 2919

原创 mvvm

https://www.raywenderlich.com/74106/mvvm-tutorial-with-reactivecocoa-part-1https://www.raywenderlich.com/74131/mvvm-tutorial-with-reactivecocoa-part-2

2017-09-19 13:49:02 263

原创 Objective-C Runtime(四)Method Swizzling

Objective-C对象收到消息之后,究竟会调用何种方法需要在运行期间才能解析出来。那你也许会问:与给定的选择子名称相应的方法是不是也可以在runtime改变呢?没错,就是这样。若能善用此特性,则可发挥出巨大优势,因为我们既不需要源代码,也不需要通过继承子类来覆写方法就能改变这个类本身的功能。这样一来,新功能将在本类的所有实例中生效,而不仅限于覆写了相关方法的那些子类实例。此方案就是大名鼎鼎的m

2017-09-19 10:04:28 311

原创 Objective-C Runtime(三)消息转发机制

消息转发机制概述上一篇博客《消息传递机制》中讲解了Objective-C中对象的消息传递机制。本文需要讲解另外一个重要问题:当对象收到无法处理的消息会发生什么?显然,若想让类能理解某条消息,我们必须以程序代码实现出对应的方法才行。但是,在编译期向类发送了其无法理解解读的消息并不会报错,因为在运行期间允许继续向类中添加方法,所以,编译器在编译期间还无法确知类中到底会不会有某个方法的实

2017-09-19 10:03:55 447

原创 Objective-C Runtime(二)消息传递机制

在对象上调用方法是包括Objective-C的众多语言都具备的功能。但在Objective-C中,这个术语叫传递消息(pass a message)。消息有可以接受参数,也可能有返回值。静态绑定和动态绑定由于Objective-C是C的超集,所以最好先理解C语言的函数调用方式。C语言使用静态绑定(static binding),也就是说,在编译期间就能决定运行时所应调用的函数。以下

2017-09-19 10:03:17 336

原创 Objective-C Runtime(一)

很早就知道了Objective-C Runtime这个概念,「Objective-C奇技淫巧」「iOS黑魔法」各种看起来很屌的主题中总会有它的身影;但一直没有深入去学习,一来觉得目前在实际项目中还没有必要了解,二来懒。但,若想成为一个合格的iOS开发者,这个东西是躲不过的,好吧,抡起胳膊开始吧,争取一点点把它整明白吧!和了解其他技术一样,在了解一个东西之前,我总是问自己,这个有啥实际意义?

2017-09-19 10:01:05 324

原创 二维有序数组查找一个数

#include #include using namespace std;string search(int a[][1000], int m, int n, int key){    int i = 0;    int j = n - 1;    while(i = 0)    {        if (a[i][j] == key)

2017-09-11 15:01:11 510

原创 iOS设置圆角的三种方式

iOS切圆角的方式第一种方法:通过设置layer的属性最简单的一种,但是很影响性能,一般在正常的开发中使用很少. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; //只需要设置layer层的两个属性 //设置圆角 image

2017-09-07 14:48:33 265

原创 排序算法

1、 对以下一组数据进行降序排序(冒泡排序)。“24,17,85,13,9,54,76,45,5,63”int main(int argc, char *argv[]) { int array[10] = {24, 17, 85, 13, 9, 54, 76, 45, 5, 63}; int num = sizeof(array)/sizeof(int); fo

2017-09-02 17:49:56 196

原创 如何把一个包含自定义对象的数组序列化到磁盘

对自定义对象的类实现NSCoding协议,例如#import @interface RegUserInfo : NSObject { NSString *siteName; NSString *siteAddress; NSString *userName; UIImage *logoImage;}@property (nonatomic, stro

2017-08-31 11:29:29 930

原创 给分类(Category)添加属性

遇到一个问题,写了一个分类,但原先类的属性不够用。添加一个属性,调用的时候崩溃了,说是找不到getter、setter方法。查了下文档发现,OC的分类允许给分类添加属性,但不会自动生成getter、setter方法。有没有解决方案呢?有,通过运行时建立关联引用。接下来以添加一个这样的属性为例:@property (nonatomic, copy) NSString *str;1、引入运行时

2017-08-31 11:23:03 330

原创 访问或修改一个类的私有属性

方法一:KVC(键值编码)定义Person类.h文件@interface Person : NSObject @private //name为私有属性@property (nonatomic, copy) NSString *name; @end.m文件@implementation Person@end在某控制器中访问或修改Person类的私有属性name首

2017-08-31 10:54:01 266

原创 MVVM+RAC

1.MVVM ViewModel: 相比较于MVC新引入的视图模型,是视图显示逻辑、验证逻辑、网络请求等代码存放的地方。 2.RAC 结合了函数式编程和响应式编程的框架.提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法,blocks回调,target-action机制,notifications和KVO.。同一个业务逻辑终于可以在同一块代码里完成了,将UI事件,逻辑处理

2017-08-22 17:54:55 282

原创 reactivecocoa框架 、MVC 和 MVVM 的理解

1.MVVMViewModel: 相比较于MVC新引入的视图模型,是视图显示逻辑、验证逻辑、网络请求等代码存放的地方。2.RAC 结合了函数式编程和响应式编程的框架.提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法,blocks回调,target-action机制,notifications和KVO.。同一个业务逻辑终于可以在同一块代码里完成了

2017-08-22 17:48:18 341

原创 load 和 initialize

1.load在被添加到runtime的时候加载,initialize是类第一次收到消息的时候被加载,load是在main函数之前,initialize是在main函数之后。2.load方法的调用顺序是:superClass -> class -> category;initialize方法的调用顺序是:superClass -> class。都不需要显示调用父类的方法,系统会自动调用,lo

2017-08-22 17:01:27 237

原创 JLRoutes

一、简介JLRoutes 是一个带有简单的基于块的API的URL路由库。它旨在使您在应用程序中以最少的代码处理复杂的URL方案变得非常简单。JLRoutes 可以很方便的处理不同 URL schemes 以及解析它们的参数,并通过回调 block 来处理 URL 对应的操作 , 是一个可以用于处理复杂跳转逻辑的三方库。二、使用场景1、在日常开发中,push、present

2017-08-11 17:47:36 750

原创 修改静态库输出路径

一.首先介绍xcode build settings一些重要配置参数。Valid Architectures :有效的arm指令集,ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的。现有的指令集有i386,x86_64,armv7,armv7s,arm64,他们和真机的对应关系如下:模拟器:iphone4s-5

2017-07-05 14:13:49 943

原创 正则

1 . 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$2. 校验中文字符串仅能是中文。^[\\u4e00-\\u9fa5]{0,}$3. 由数字、26个英文字母或下划线组成的字符串^\\w+$4. 校验E-Mail 地址

2017-06-13 18:27:32 155

原创 Unix常用命令

(一)基本命令命令格式: 命令 参数1.ls 显示文件名,等同于dos下dir命令命令格式:ls [option] fileoption:-l 显示详细列表域1 :文件类型和文件权限域2 :文件连接数域3 :文件所有者名字域4 :文件用户组名字域5 :文件长度域6-8 :最近修改日期域9 :文件名-a 显示所有文件,包含隐藏文件(以. 起头的文件

2017-06-13 15:22:44 396

原创 苹果公司联系邮箱

[email protected]应用在提交后(处于“审核中”),应用和应用内购的状态-状态更新通知——与开发者遭拒和影响审核时间相关的信息-应用遭拒通知咨询-快速审核请求快速审查申请https://developer.apple.com/appstore/contact/appreviewteam/index.html苹果中国官网 中文版技术支持社区 :

2017-05-23 10:28:18 6508

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除