摘要: 模型->jsonString 方式1. NSDictionary *paramDict = getTakeupInfo.yy_modelToJSONObject; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:paramDict 阅读全文
posted @ 2022-05-12 17:58 HJiang 阅读(500) 评论(0) 推荐(0) 编辑
摘要: #import <Foundation/Foundation.h> /** Timer 间接事件目标代理 */ @interface WeakTimerTarget : NSObject @property (nonatomic, weak) id target; @property (nonato 阅读全文
posted @ 2022-05-12 17:50 HJiang 阅读(72) 评论(0) 推荐(0) 编辑
摘要: Runtime 阅读全文
posted @ 2018-09-06 21:45 HJiang 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 事件响应链 阅读全文
posted @ 2018-09-06 21:38 HJiang 阅读(88) 评论(0) 推荐(0) 编辑
摘要: WCDB WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS。 WCDB for iOS/macOS 基本特性 易用,WCDB支持一句代码即可将数据取出并组合为object。 WINQ(WCDB语言集成查询):通过WINQ,开发者无须为了拼接SQL的字符 阅读全文
posted @ 2018-01-10 20:28 HJiang 阅读(1132) 评论(0) 推荐(0) 编辑
摘要: WKWebView加载问题 baseURL需要注意 其中2个方式是ios9以后提供的 方法参数baseURL,此参数是html加载的资源是基于的基础路径,也可以理解为资源加载引入的相对路径,一般为[[NSBundle mainBundle] bundleURL], 如果设置的是bundleURL那么 阅读全文
posted @ 2017-12-01 15:52 HJiang 阅读(2379) 评论(4) 推荐(0) 编辑
摘要: UIWebView使用JavaScriptCore实现JS与OC互相调用,。它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下,提供了简单快捷的方式与JavaScript交互。 1、简要介绍JavaScriptCore JavaScrip 阅读全文
posted @ 2017-11-14 14:39 HJiang 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,还有一种简单的方式。那就是利用WKWebView的新特性MessageHandler来实现JS调用原生方法。 MessageHandler 是什么? WKWebView 初始化时,有一个参数叫configuration, 阅读全文
posted @ 2017-11-14 14:38 HJiang 阅读(2203) 评论(0) 推荐(0) 编辑
摘要: JS调用原生OC篇 方式一 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理。我写了一个简单的HTML网页和一个btn点击事件用来与原生OC交互,HTML代码如下: 然后在项目的控制器中实现UIWebView的代理方法: 注意:1. JS 阅读全文
posted @ 2017-11-14 14:36 HJiang 阅读(452) 评论(0) 推荐(1) 编辑
摘要: WKWebView特性: 在性能、稳定性、功能方面有很大提升. 允许JavaScript的Nitro库加载并使用(UIWebView中限制). 支持了更多的HTML5特性. 高达60fps的滚动刷新率以及内置手势 将UIWebViewDelegate与UIWebView重构成了14类与3个协议 基本 阅读全文
posted @ 2017-11-14 14:33 HJiang 阅读(3912) 评论(0) 推荐(1) 编辑
摘要: UIWebView的基础使用 属性: UIWebView代理: 如果页面上的链接需要进行拦截处理可以在一下方法中处理,通过返回值控制是否允许加载链接页面内容,YES:记载页面内容,NO:不允许; UIWebViewNavigationType枚举值 让UIWebView更加接近Native 某些情况 阅读全文
posted @ 2017-11-14 14:32 HJiang 阅读(864) 评论(0) 推荐(0) 编辑
摘要: iOS企业版app部署到服务器 .正对ios升级得ios7 以后,plist文件必须放到 https得服务器上了,http不可以用了 部署具体过程 准备文件:plist文件,ipa安装包,html下载页面 .plist参照模板如下 ipa安装包放入plist指定的software-package安装 阅读全文
posted @ 2017-11-13 15:55 HJiang 阅读(4118) 评论(0) 推荐(0) 编辑
摘要: 以下是一些加密的思路和加密方式 1.对数据库文件进行加密 2.对存储的内容进行加密,比如对某些重要字段进行加密,加密方式可以采用AES ,Base64,MD5等,其中MD5加密不可逆. 以下内容采用SQLCipher对CoreData数据库内容进行加密. SQLCipher 采用AES 256位对s 阅读全文
posted @ 2017-11-11 15:23 HJiang 阅读(500) 评论(0) 推荐(0) 编辑
摘要: CoreData数据库结构升级和数据迁移 数据库迁移步骤 1.选中.xcdatamodeld文件,然后点击Xcode菜单editor->Add Model Version 比如取名:Model.xcdatamodel 2.取一个Version名字,Based on model是基于现有Model文件 阅读全文
posted @ 2017-11-11 15:22 HJiang 阅读(535) 评论(0) 推荐(0) 编辑
摘要: 待续 阅读全文
posted @ 2017-11-11 15:21 HJiang 阅读(149) 评论(0) 推荐(0) 编辑
摘要: CoreData简介 CoreData是一门功能强大的数据持久化技术,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互。CoreData提供数据--OC对象映射关系来实现数据与对象管理,这样无需任何SQL语句就能操作他们。CoreData数据持久化框架是Co 阅读全文
posted @ 2017-11-11 10:29 HJiang 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 网络请求: NSURLConnection 发送同步请求: nsurlconnection发送同步请求是阻塞式,会阻塞当前线程 发送异步请求: nsurlconnection发送异步请求底层是开启子线程发送请求,回调默认是在主线程中回调,如果需要在子线程中回调可以设置代理队列setDelegateQ 阅读全文
posted @ 2017-09-18 22:37 HJiang 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 过时属性和方法提示 阅读全文
posted @ 2017-09-16 19:32 HJiang 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 方法调用时机 相同点: 程序启动都只会执行仅且一次,再次怎么调用使用类都不会执行了. 不同点: 方法调用时机不一样. > + load程序启动类加载时就会调用,不管该类是否有使用或有Import都会执行 > + initialize 程序启动后,只有类使用时都会触发,包括调用类的类方法或对象方法; 阅读全文
posted @ 2017-09-09 17:13 HJiang 阅读(389) 评论(0) 推荐(0) 编辑
摘要: 可以使用GCD创建定时器 创建定时器: 注意创建gcd定时器timer后,需要保存timer,需要有个引用引用timer,要不然timer会销毁 取消定时器 总结 GCD定时器 1.时间调度很准确,时间是以纳秒为单位,比NSTimer更加精确 2.GCD是不受runloop的影响, 比如:拖动scr 阅读全文
posted @ 2017-09-09 11:19 HJiang 阅读(470) 评论(0) 推荐(0) 编辑
摘要: Runtime是什么? runtime是OC底层的一套C语言的API(引入 <objc/runtime.h> 或<objc/message.h>),编译器最终都会将OC代码转化为运行时代码,底层是通过runtime创建的对象. 另外利用runtime 可以做一些OC不容易实现的功能 .动态交换两个方 阅读全文
posted @ 2017-09-04 23:16 HJiang 阅读(239) 评论(0) 推荐(0) 编辑
摘要: runloop运行流程图 定时器 结论:如果定时器在主线程中开启,可以正常运行;定时器在子线程中开启,无法正常运行; 如果对应线程没有 RunLoop 该方法也会失效,也就是说currentRunloop中 没有timer,没有source,也没有OBServer,添加 [NSRunLoop cur 阅读全文
posted @ 2017-09-04 23:00 HJiang 阅读(548) 评论(0) 推荐(0) 编辑
摘要: dispatch_apply,可以并发的循环迭代,性能上可以提高,前提是循环不在乎迭代的顺序 如果不想让在当前线程参与迭代任务,可以把整个迭代任务包含在一个新的线程中 (优先采用此方式), 如: 但此方式需要注意一个问题,就是新开的线程包含的迭代任务,不要是同一个队列,要不然整个迭代任务会在同一个线 阅读全文
posted @ 2017-09-02 21:20 HJiang 阅读(319) 评论(0) 推荐(0) 编辑
摘要: GCD提供了信号semaphore来控制线程并发数,提供一下三个函数 dispatch_semaphore_create(<#long value#>) // 创建信号semaphore,value参数为任务并发同时执行时线程最大并发数 dispatch_semaphore_wait(<#dispa 阅读全文
posted @ 2017-09-02 20:43 HJiang 阅读(646) 评论(0) 推荐(0) 编辑
摘要: dispatch_once 在dispatch_once block中的代码在程序启动到程序退回只会执行一次,如:不管for循环多少,只会一次打印 利用dispatch_once实现单粒模式 单粒模式(不管以任何方式创建对象,内存中永远只会有且仅有一份该对象的地址) 实现单粒,需要步骤: 1.提供一 阅读全文
posted @ 2017-09-01 18:02 HJiang 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 单粒模式宏定义 宏中使用##,传入参数作为shared方法名称: 定义开发模式和发布模式条件宏 替换系统NSLog 阅读全文
posted @ 2017-09-01 11:04 HJiang 阅读(285) 评论(0) 推荐(0) 编辑
摘要: OC可变参数: 使用__attribute__((sentinel))语法可以告诉编译器这是一个需要哨兵参数的函数。它的作用就是告诉函数没有参数了。这也是为什么ObjC中[NSArray arrayWithObjects: ...,nil]最后必须以nil参数结尾的原因 阅读全文
posted @ 2017-09-01 11:01 HJiang 阅读(426) 评论(0) 推荐(0) 编辑
摘要: GCD全称Grand Central Dispatch,是Apple提供的一套底层API,提供了一种新的方法来进行并发程序编写,它的API包含在libdispatch库中. 觉得需要理解GCD中的三个要点: 1.同步异步(sync,async) sync表示同步,不会开启新线程,任务是在当前线程中执 阅读全文
posted @ 2017-08-29 14:51 HJiang 阅读(270) 评论(0) 推荐(0) 编辑
摘要: .计算时间间隔多少秒,可以使用到计算程序代码执行时间 方式1: 方式2: 方式3: 计算N天前日期 当前2017-09-16 运行结果: 2017-09-18 阅读全文
posted @ 2017-08-25 00:02 HJiang 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 综合项目 iOSProject 国内优秀框架 YYKit YYKit 是一组庞大、功能丰富的 iOS 组件。 为了尽量复用代码,这个项目中的某些组件之间有比较强的依赖关系。为了方便其他开发者使用,我从中拆分出以下独立组件: YYModel — 高性能的 iOS JSON 模型框架。 YYCache 阅读全文
posted @ 2017-08-22 17:19 HJiang 阅读(414) 评论(0) 推荐(0) 编辑