自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 原生丝滑的NavigationBar

原生丝滑的NavigationBar地址效果主要属性全局设置UINavigationBar属性使用只需要地址https://github.com/cn425237/CNanNavigationBar效果有几张GIF太大不让上传, cloning后都可以看到主要属性/// 允许侧滑或点击返回上一个控制器 可重写@objc open var shouldPopOnBackButtonPress: Bool { get }/// 导航隐藏显示public var cn_navBarHidd

2020-06-04 17:17:53 205

原创 iOS开发笔记>> 获取当前APP的设备名称和版本号等内容

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];CFShow(infoDictionary);// app名称NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];// app版本NSString *a...

2018-05-10 11:00:59 499

原创 iOS微信H5支付>> 支付完成返回原APP

iOS实现微信H5支付完成后返回原APP而不打开Safari或没反应...由于公司多个APP都要用微信支付, 需要申请好多APPID, 所以避免这些申请的过程和时间的浪费, 把微信H5支付集成到多款APP上.下面说一下开发过成:首先去微信商户后台去申请开通H5支付, 假设支付域名填写的  www.maimaicn.com,注意是顶级域名,不是二级或三级的子域名服务器端通过统一下单接口从微信拿到支付...

2018-04-26 16:57:04 5906

原创 Boost库>> Mac安装

Boost库的介绍: http://www.boost.org/要想在mac上使用boost库写应用程序,首先需要安装boost安装步骤:参考官网教程 http://www.boost.org/doc/libs/1_57_0/more/getting_started/unix-variants.html1.下载 Download boost_1_66_0.tar.bz22.解压控制台操作命名:ta...

2018-04-04 19:48:58 286

原创 CocoaPods>> 升级更新

经验: 想要升级CocoaPods必须翻墙, 为什么这么说. 试过就知道了. 总结下来,要想成功升级cocoapods需要一个正确的操作流程和命令语句。你可以先直接升级, 在终端执行:sudo gem install cocoapods有时候会发生以下错误: ERROR: Could not find a valid gem 'cocoapods' (>= 0) in any reposi...

2018-04-04 19:37:21 150

原创 Homebrew>> 你应该定期更新

为什么这么做:我发现不少人都不会经常更新,或者只在必须用某个工具的新版本的时候才更新。他们的看法是,更新有可能产生一些意外的问题,反正当前环境足够稳定可以用,干嘛自找麻烦呢?这个看法对也不对。对是因为,更新产生的潜在问题不可避免。不对是因为总有一天你需要升级的,也许是为了某个工具的新特性,也许是为了修复软件的漏洞,也许你安装的包非要依赖另一个包的新版本,等等。如果隔了很长一段时间才升级,那潜在的小...

2018-04-04 19:36:41 2052

原创 Homebrew>> 安装

1. 是用来干嘛的我就不多说了2. 安装:         打开终端, 复制粘贴, 过程中需要输入密码, 其他无需任何操作     /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"3. 卸载:        打开终端, 复制粘贴, 其实只用把上面安装的...

2018-04-04 19:35:06 234

原创 iOS开发笔记>> socket, http(post, get), TCP/ IP

1. socket 连接时, 可以指定使用的传输层协议是哪一个, socket 可以支持不同的传输层协议(TCP 或 UDP), 当使用 TCP 连接时, 该 socket 连接就是一个 TCP 连接. 2. http 协议(即超文本传输协议)就好像是轿车, 提供了封装或者显示数据的具体形式, socket 是发动机, 提供了网络通信的能力. 且 http 链接最显著的特点是客户端发送

2016-08-21 23:14:56 455

原创 iOS开发笔记>> 在开发中如何处理 NSLog?

可以创建 pch 文件, 在文件中写入以下代码// 保证 #ifdef 中的宏定义只会在 OC 的代码中被引用// 否则,一旦引入 C/C++ 的代码或者框架,就会出错!#ifdef __OBJC__#ifdef DEBUG#define NSLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LI

2016-08-15 02:00:34 268

原创 iOS开发笔记>> 程序上线后, 如何调试程序?

第三方框架收集错误信息: 比如友盟, 国外的第三方等. 我用的是腾讯的 bugly, 比较方便, 程序崩溃日志可以直接查看, 一目了然. 注: bugly 官方网站 http://bugly.qq.com/

2016-08-15 01:38:29 224

原创 iOS开发笔记>> 在开发中如何调试程序?

1.看控制台输出的内容关键字”reason". 2.用堆栈调试技巧: 出现 bug 可以看控制台输出的堆栈内容.   堆栈内容从下往上对应代码的先后执行顺序, 最下面对应先执行的代码, 最上面对应最后执行的代码. 注: 如果在真机中运行只显示错误信息, 不显示堆栈内容

2016-08-15 01:37:19 243

原创 iOS开发笔记>> runLoop机制的简介

1. runLoop 是多线程很重要的机制, 就是一个线程一次只能执行一个任务, 执行完成任务后就会退出线程. 主线程通过 do-while 死循环让程序持续等待下一个任务不退出. runLoop 没事时进入休眠状态, 为了节省 CPU 资源. 子主线程通常来说就是为了执行某个任务而创建的, 执行完就会归还资源, 因此默认不开启 runLoop. 2. 每一个线程都有其对应的 runL

2016-08-14 22:29:06 244

原创 iOS开发笔记>> runTime 运行时机制简介

const char * className = "Calculator"; Class kclass = objc_getClass(className); if (!kclass) { Class superClass = [NSObject class]; kclass = objc_allocateClassPair(superCla

2016-08-13 23:33:15 491

原创 iOS开发笔记>> 什么时候会报 Unrecognized selector 的异常?

> 当调用对象的某个方法的时候, 如果在当前类中没有找到此方法, 那么就到当前类的父类中去寻找, 如果在父类中没有找到, 那么就去父类的父类中去寻找, 一直找到 NSObject 都没有这个方法, 就会报 Unrecognized selector 的异常. 但是在这之前, objc 的运行时会给出三次拯救程序崩溃的机会. > 第一次: 动态添加一个新方法并执行的机会

2016-08-11 17:40:54 3209 3

原创 iOS开发笔记>> 以 schedcledTimerWithTimerInterval…的方式触发的 timer,在滑动页面上的列表时,timer 会暂停回调,为什么?如何解决?

遇到的问题: timer 本身不能自动循环的做一些事, 必须把它加入到消息循环后才能处理一些事情, 而用 scheduleTimerWithTimeInterval 的方式创建的 timer 做了两件事情: 1. 创建了 NSTimer 对象2. 把这个 timer 加入到当前 RunLoop 的 NSDefaultRunLoopMode 中因为线程一般情况下就是 NSDefaul

2016-08-11 15:53:20 843

原创 iOS开发笔记>> 简述UItableView 的复用机制

每次创建 cell 的时候通过 dequeueReusableCellWithIdentifier: 方法创建 cell, 它先到缓存池中找指定标识的 cell, 如果没有就直接返回 nil.如果没有找到指定标识的 cell, 那么通过initWithStyle: reuseIdentifier: 创建一个 cell. 当 cell 离开屏幕界面就会被放到缓存池中, 以供下

2016-08-11 15:13:31 495

原创 iOS开发笔记>> IBOutlet连出来的视图属性为什么可以被设置成weak?

在 storyboard 中添加一个控件引用关系是这样的(以 UIbutton 为例): UIviewController -> UIview -> UIbutton此时 UIviewController 强引用着 UIview , UIview 强引用着 UIbutton , IBoutlet 连线到控制器的. m 或者. h 中作为视图的属性时用 weak 修饰就可以了, (觉得用

2016-08-11 14:24:44 2584

原创 iOS开发笔记>> storyboard 项目中控件 installed 属性简单介绍

参照 sizeclass 隐藏显示指定的控件为什么这么说呢? 首先先介绍下 sizeclass1. sizeclass 介绍: 自适应布局的布局约束自然是好东西,但也不是万能的,有时候我们也需要使用最基本的布局,所以使用size classes将它们两者结合起来才能碰撞出更有激情的火花。Size Classes并不代表真正的尺寸,而是我们从感官上感觉尺寸的种类,

2016-08-11 11:49:49 1941

原创 iOS开发笔记>> 单列设计模式

> 单例设置模式就是只有一个实例. 单例模式确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例. 这个类称为单例类1. 单例模式的要点: 显然单例模式的要点有三个: 某个类只能有一个实例, 它必须自行创建这个实例, 它必须自行向整个系统提供这个实例2. 单例模式优点: 1) 实例控制: 单例模式会阻止其他对象实例化自己的单例对象的副本, 从而确保所有

2016-08-11 10:35:00 206

原创 在一个tableView 中需要自定义多种样式的cell(两种或三种),通常你如何实现,说说思路即可?

用 cell 的 initWithStyle 初始化方法创建不同 identifier 的 cell在使用 cell 的时候根据 identifier 做出相应的判断加载不同的 cell

2016-08-11 10:10:52 3726

原创 iOS开发笔记>> KVC 和 KVO 简介

首先来说下 KVC: 1.  KVC(key - value - coding)键值编码, 更多情况下会简化程序代码, 常见用法: 1) 给私有变量(该变量不对外开放)赋值: [Person setValue: @"19" ForKeyPath:@"age"]2) 字典转模型: setValuesForKeyWithDictionary3) 取出私有变量: [Person

2016-08-08 21:43:22 227

原创 iOS开发笔记>> MVVM和MVC设计模式的分析

MVC: Model, View, Controler view (UI 层): view 只负责展示从 controller 接受到数据. 也就是把 model 转化成 UImodel (数据层): 不能直接与 controller 通讯, 因为 model 是独立于 UI 存在的controller: 通过 view 来接受用户的输入, 之后利用 model 来处理用户

2016-08-08 18:59:06 312

原创 iOS开发笔记>> Core Animation(核心动画)

Core Animation 是直接作用在 CALayer上的(并非 UIview 上)非常强大的跨 Mac OS X 和 iOS 平台的动画处理 API, Core Animation 的动画执行过程都是在后台操作的, 不会阻塞主线程. 1. Core Animation 继承结构: 2. 基本用法: 使用步骤类似于手势识别: > 创建动画对象> 设置动画

2016-08-08 16:16:48 324

原创 iOS开发笔记>> Quartz2D简单介绍

1. 什么是Quartz2DQuartz2D是一个二维绘图引擎, 同时支持iOS和Mac系统Quartz2D能完成的工作:绘制图形: 线条, 三角形, 矩形, 圆, 弧等绘制文字绘制, 生成图片(图像)读取, 生成PDF截图, 裁剪图片自定义UI控件2. Quartz2D在iOS开发中的价值为了便于搭建美观的UI界面, iOS提供了UIKit

2016-08-08 15:58:21 215

原创 swift的简单介绍!

简介: swift语言由苹果公司在2014年推出, 用来撰写OS X 和 iOS应用程序, 2014年在Apple WWDC发布历史: 2014年7月, 苹果开发者工具部门总监"克里斯·拉特纳"开始着手swift编写语言的设计, 用一年时间完成基本的框架. swift历经4年的开发期, 2014年6月发布, 计划在2015年底开源(2015年12月4日开源)大事件:

2016-08-08 13:41:59 249

原创 iOS开发笔记>> weak和unowned的介绍

使用weak和unowned关键字可以避免所谓的循环引用weak相当于OC里面的weak, iOS5.0之后推出 weak, 当创建的对象销毁之后, 指针会指向nil, 比较安全unowned相当于OC里面的assign, iOS4.0之后推出的, 当对象销毁之后, 原理的指针还指向原来的地址. 当再次去访问的时候, 会出现野指针错误.

2016-08-08 00:13:49 381

原创 iOS开发笔记>> kvc的keypath中集合运算符怎么使用?

简单说一下: KVC集合运算符, 返回strings, number或dates@count: 返回一个值为集合中对象总数的NSNumber对象@sum: 首先把集合中的每个对象都转换成double类型, 然后计算其总数, 最后返回一个值为这个总和的NSNumber对象@avg: 把集合中的每个对象都转换成double类型, 然后计算其总数, 最后返回一个值为这个集合中所有对象总和

2016-08-07 01:22:56 578

原创 iOS开发笔记>> 代理模式是什么?

代理模式就是我们经常说的代理设计模式, 也就是代理, 这也是iOS中一种消息传递的方式, 也可以通过这种方式来传递一些参数. 代理是一种通用的设计模式, 由代理对象, 委托者, 协议三部分组成, 有特定的语法来实现代理模式, OC语言可以通过@Protocol实现协议1. 代理主要由3部分组成: 协议: 用来指定代理双方可以做什么, 必须做什么代理: 根据指定的协议

2016-08-05 23:28:31 335

原创 控制器View的生命周期及相关函数是什么?你在开发中是如何用的?

1. 首先判断控制器是否有视图, 如果没有就调用loadView方法创建: 在此方法中可以通过storyBoard或者代码创建2. 随后调用viewDidLoad, 进一步对视图进行初始化操作, 程序运行只会调用一次, 此时才有了view3. 在视图显示之前调用viewWillAppear, 该函数只要有视图显示就会被调用, 该函数可以被多次调用, view即将显示, 此时superVie

2016-08-05 21:40:40 490

原创 iOS开发笔记>> 如何渲染自定义格式字符串的UILabel

通过NSMutableAttributedString设置, 代码如下- (void)viewDidLoad { [super viewDidLoad]; NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"啊哈哈哈好烦"];

2016-08-05 20:56:39 433

原创 iOS开发笔记>> 设置scrollView的contentSize能在viewDidLoad里设置么,为什么?

所有事情都是相对而言的, 是可以设置的. 因为在ViewDidLoad中view刚刚创建, 可能并不是真正的frame, 所以在ViewDidLoad中设置scrollView的contentSize不太好.

2016-08-05 20:52:03 1582 1

原创 iOS开发笔记>> UIButton与UITableView的层级结构

1. 继承结构UIButton -> UIControl -> UIView -> UIResponder -> NSObjectUITableView -> UIScrollView -> UIView -> UIResponder -> NSObject2. 内部子控件结构UIButton内部子控件结构: 默认有两个, 一个UIImageView, 一个UILable,

2016-08-05 20:25:41 1628

原创 iOS开发笔记>> 怎么解决cell缓存池满的问题

这个问题挺有意思iOS中不存在缓存池满的情况, 因为通常iOS开发中对象都是在需要的时候才创建, iOS程序员有一句常说的话就是懒加载, 懒加载想必就不用多说了吧. 还有在UITableView中一般只会创建刚开始出现在屏幕中的cell, 之后都是从缓存池中取, 不会再创建新的对象. 缓存池中最多也就一两个对象, 所以iOS开发中cell的缓存池不存在满的问题. 缓存池满的这种情况一般在J

2016-08-05 19:44:22 715

原创 iOS开发笔记>> 下拉刷新,自定义UIControl

自定义下载刷新分析: 1. 系统的下拉刷新 UIRefreshControl , 没有继承系统的下拉刷新, 而继承UIControl 2. 自定义UIControl, 系统的下拉刷新默认有宽和高, 自定义的时候在init构造函数中设置固定的宽和高和y值3. 添加子控件(菊花, 文字一些控件)设置约束4. 下拉刷新线索: contentOffset. y值发生变化时, 对应的效果才会

2016-08-05 17:57:37 454

原创 iOS开发笔记>> GCD调度组的使用

特点: 调度组中的所有异步任务执行结束后, 会得到统一的通知使用场景: 监听一组异步任务是否执行结束, 如果执行结束就能得到统一的通知常规用法: - (void)gcdDemo1{ // 调度组 dispatch_group_t group = dispatch_group_create(); // 队列 dispatch_queue_t q

2016-08-05 17:30:52 1416

原创 iOS开发笔记>> layoutsubViews什么时候调用

layoutsubViews在以下情况下会被调用1. init时不会调用layoutsubViews2. 添加子控件时会调用layoutsubViews3. 修改view的frame时会调用layoutsubViews4. 滚动UIScrollView时会调用layoutsubViews5. 旋转UISreen时会触发父view上的layoutsubViews事件6. 当改

2016-08-05 16:54:14 421

原创 闭包, 代理和通知的区别?

闭包: 就是block, 在swift中叫做闭包block是iOS4.0+ 和Mac OS X10.6+ 引进的C语言的扩展, 用来实现匿名函数的特征blocks语法块代码以闭包的形式将各种内容进行传递, 可以是代码, 可以是数组, 什么都可以闭包是能够读取其他函数内部变量的函数, 在一段连续请求代码中可以清晰的看到调用参数 (比如发送请求) 和响应结果. 所有采用block能够抽取出

2016-08-05 14:56:37 726

原创 约束动画如何实现?(swift)

约束动画需要view调用一下layoutIfNeeded才可以, 直接上代码 // MARK: - 弹簧动画 private func settingAnimation() { // 更新约束 self.iconImageView.snp_updateConstraints(closure: { (make) -> Void

2016-08-05 14:40:04 696

原创 沙盒路径的文件夹有几个?分别有什么用

一共有三个分别是: Document, Library, TempDocumen: 常用目录, 保存用户重要信息, 比如数据库Library: 此文件夹下有2个文件夹, Cache: 存放体积大又不需要备份的数据, 比如SDWebImage的缓存. Preferences: 偏好设置目录, 保存用户偏好设置Temp: 存放临时文件, 不会被备份, 而且这个文件夹下的数据有可能随时被清楚

2016-08-05 14:28:55 568

原创 网络接口调试过程中,遇到什么问题?

网络请求数据失败, 可以查看打印控制台的code码. 常见的状态码: 1开头的状态码: 消息这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。这些状态码代表的响应都是信息性的,标示客户应

2016-08-05 14:13:23 1367

空空如也

空空如也

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

TA关注的人

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