自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (7)
  • 问答 (2)
  • 收藏
  • 关注

原创 method swizzle

认知:oc动态运行时,改变成员方法的指针的指向,使其类成员方法的指针指向我们想要的方法的实现 IMP 指针。这里我们是在 Dispatch Table中操作,其实所谓的方法互换,就是互换了两个sel指针的指向。注意点: 在+(void)load 方法中加载,原因,由于method swizzling会影响到类的全局状态,因此要避免在并发处理中的竞争情况,。 因为swimming会改变全局状态,因此

2016-05-22 22:15:53 380

原创 RunLoop 之 NStimer

NSTimer其实就是CFRunloopTimerRef,他们之间是toll-free bridged的。一个NSTimer注册到Runloop后,runloop会为其重复的时间点注册好事件。runloop为什么节省资源,并不会在非常准确的时间点这个Timer。Timer有个属性叫做宽容度,表示了当时间点后,容许有多少最大的误差。如果,某一个时间点被错过了。例如之行了一个很长的任务,则那个时间点的回

2016-05-22 22:15:04 441

原创 Runloop

一.我们先来介绍runloop的基础知识 1. 什么是runloop ?字面意思理解就是,运行循环。但是,要说的话,我认为是这样的,每一个线程都有一个一一对应的runloop,只有主线程的runloop是自动创建的,子线程runloop是不会自动创建的,需要的时候,需要我们自己去创建,那么问题来了,什么时候去创建runloop,官方文档明确写出,runloop在第一次获取的时候创建,就是说除非我

2016-05-21 09:01:24 433

原创 Autolayout之 关于+requiresConstraintBasedLayout方法作用

看到很多Autolayout写的自定义控件中都实现了+requiresConstraintBasedLayout方法,一直不知道这个方法有什么用,因为不实现这个方法也没发现有什么影响。经过查找资料,有解释如下:constraint-based layout engages lazily when someone tries to use it (e.g., adds a constraint to

2016-05-16 15:13:45 561

原创 在头文件中尽量少引入其他文件

前言:通俗的话来说,就是如果一个头文件中包含另外一个头文件,如果你引入了这个头文件也会引入另外一个文件的所有内容,将引入头文件的时机尽量延后,只有在确有需要时在引入,这样可以减少类的使用者,所需引入头文件的数量。反之,则会增加编译时间。

2016-04-29 14:45:35 344

原创 浅谈objective-c

oc语言采用 "消息结构",而非函数调用。使用消息结构的语言,其运行时,所执行的代码由运行环境来决定;而使用函数调用的语言,则由编辑器决定。如果,调用的函数是多态的,那么在运行时就要按照"虚方法表"来查出到底应该执行哪个函数实现。而采用消息结构的语言总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型。接收消息对象问题也要在运行时处理,其过程叫做动态绑定。 oc语

2016-04-29 14:21:21 358

原创 隐式转换

基本原则:低精度 –> 高精度转换。 不满足该原则,隐式转换是不能发生的。 当然这个时候就可以使用与之相对于的显式类型转换(又称强制类型转换),使用方法如下: double a = 2.0; int b = (int)a;使用强制类型转换会导致精度的损失,因此使用时务必确保你已经拥有足够的把握。

2016-04-26 13:52:57 398

原创 验证根元类的isa指针指向自己

我们可以使用oc语言提供的与runtime相关的函数,动态的创建一个新的类,并且通过相关的方法获得isa指针的值,从而了解对象的内部结构解释一下,代码中用到的函数:objc_allocateClassPair //动态的创建新的类class_addMethod //给类增加新的方法objc_registerClassPair //来注册新的类object_getClass //来获得isa指针

2016-04-25 21:55:38 534

原创 为什么catagory可以增加成员方法,不可以增加成员变量

如果把类的实例看成一个c语言的结构体,isa指针就是这个结构体的第一个成员变量,而类的其它成员变量依次排列在结构体中 这里是我们验证,代码地址:oschinahttps://git.oschina.net/Cshaonian/MyIsa.git我们在@autoreleasepool处,设置断点,在控制台输入 p *child 我们可以看到 因为,对象在内存中的排布可以看成一个结构体,该结构体的大

2016-04-25 21:42:40 398

原创 ios中isa指针

isa指针: OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都有一个isa指针,指向该指针的类。每一个类描述了一系例他的实例的特点,包括成员变量的列表,成员函数的列表。每一个对象都可以接收消息,而对象接收消息列表保存在他所对应的类中。当我们初始化一个对象的时候,是怎么发送消息的NSObject *obj=[[NSObject alloc] in

2016-04-25 21:27:36 6594

原创 javaScript文件位置调整

JavaScript的js后缀的文件默认被拖到工程中后,是在编译列表中,而不是资源列表中的。这里我们需要手动调整位置否则他就不能打包到ipa文件中,如下: 修改如下:

2016-04-24 21:42:38 443

原创 忽略XCode编译警告

由于xcode和LLVM在不断的升级,有些时候我们使用的第三方库会在新版的额xcode产生一些编译警告,对于我们确定没有编辑警告的代码我们可以加上-w的编译参数,是的这些文件不会产生编辑警告,如下图:

2016-04-24 21:34:52 305

转载 为什么viewdidunload被弃用

前言 我在去年的一篇文章 《iOS5 中 UIViewController 的新方法》 中介绍了 iOS5 引入的关于 ViewController 的新方法。但是现在如果运行该文章中的 Sample 代码的话,你会发现 Log 中不会再出现 viewDidUnload 方法被调用的记录。这是因为在 iOS6 中,viewDidUnload 回调方法被 Deprecated 掉了。查看苹果的文档,

2016-04-24 21:26:47 537

原创 对于ios7.0以后的截屏功能

ios 7.0系统自带了api截屏的功能: 多说无谓,注释都在代码里:https://git.oschina.net/Cshaonian/ScreenCapture.git

2016-04-24 21:10:27 335

原创 设置应用内的系统控件语言

1.在UIWebView中长按会弹出系统的上下文菜单. 2.在UIImageOickerController 中会使用系统的照相机界面. 3.在编译状态下的UITableViewCell,处于待删除状态时,会有一个系统删除的按钮, 以上这些空间显示的语言和你手机的语言并不一致,可以通过下面的plist文件设置,如下: 在plist加入: CFBundleLocalizations (

2016-04-24 21:04:27 294

原创 使用Safari进行调试

在使用之前需要打开,safari的调试模式,在safari的菜单中,选择Safari ->偏好设置(Preferences) -> Advanced 勾上 ->(在菜单上显示“开发“菜单) 同时在模拟器,或者真机上的把调试模块打开,步骤如下: 之后通过模拟器或者真机,这时你会看到safari上面多出了,开发选项,选择步骤如下:

2016-04-24 20:44:06 1878

转载 给iOS工程增加Daily Build

前言Daily Build 是一件非常有意义的事情,也是敏捷开发中关于 “持续集成” 的一个实践。Daily Build 对于开发来说有如下好处:保证了每次 check in 的代码可用,不会造成整个工程编译失败。进度跟进。产品经理可以每天看到最新的开发进度,并且试用产品,调整一些细节。很多时候,一个新功能,你真正用了一下才能有体会好或不好,所以 daily build 也给产品经理更

2016-04-24 20:17:34 265

转载 ios动态下载多种中文字体

引言在今年 WWDC 的内容公开之前,大家都以为 iOS 系统里面只有一种中文字体。为了达到更好的字体效果,有些应用在自己的应用资源包中加入了字体文件。但自己打包字体文件比较麻烦,原因在于:1、字体文件通常比较大,10M - 20M 是一个常见的字体库的大小。大部分的非游戏的 app 体积都集中在 10M 以内,因为字体文件的加入而造成应用体积翻倍让人感觉有些不值。如果只是很少量的按钮字体

2016-04-23 22:17:33 432

原创 ios中使用模版引擎渲染HTML页面

在iOS实际的开发中,使用UIWebView来加载数据使用的场景特别多。很多时候我们会动态的从服务器获取一段HTML的内容,然后App这边动态的处理这段HTML内容用于展示在UIWebView上。使用到的API接口为:- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;由于HTML内容通常是变化的,所以我们需要动态生成

2016-04-23 22:10:52 3712

转载 iOS开发UI篇—UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍一、简单介绍UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindowiOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了一个iOS程序之所以能显示到屏幕上,完全是因为

2016-04-22 15:06:45 273

原创 UIWindow

UIWindow是最顶层的界面容器,继承自UIView ,所以它具有UIView的所有功能,但是,更多的时候UIwindow是作为UIview的顶层容器存在,每一个ios工程都有一个UIWindow,但是不是唯一,xcode会为我们自动生成UIWindow,并让她成为keywindow并且显示出来。那下面我们来看看系统启动过程中,系统调用UIWindow: 系统创建UIWindow代码:sel

2016-04-22 15:06:07 843

原创 后台运行

当你按下home键的时候,应用最多只有5秒钟的时间做一些保存和清理工作,但是使用UIAoolication beginBackgroundTaskWithExpirationHandler方法可以让应用最多有10分钟的时间在后台运行。- (void)applicationDidEnterBackground:(UIApplication *)application { //开始后台执行的代码

2016-04-21 18:12:02 335

原创 修改block 之外的变量

默认情况下,在程序块中访问的外部变量是复制过去的,写操作不对原变量生效,但是你使用关键字 __block 来让其写操作生效__block int myInt=10; void (^MyText)(void)=^{ myInt=20; }; MyText(); NSLog(@"%i",myInt);在这里在谈一下,深拷贝和浅复制: 深拷贝这么说吧,就是

2016-04-21 17:41:00 206

转载 用Git进行协同开发

问题场景描述 常常会遇到这样的协同场景:后台的同事和前端的同事需要共同开发一个新功能,而他们的代码相互依赖,所以需要不停地更新各自的代码进行联调。 对于这种场景,最简单的方式就是,这 2 个同事坐到一起,然后把 svn 当作一个共享代码的中转站来共享开发中的代码。 在这种方式下,大家各自写自己的代码,提交到 svn 上,然后用 svn up 获得对方的代码。在调试问题的时候,大家可能不停地更新

2016-04-21 17:16:40 348

原创 浅谈GCD

GCD是苹果公司卡开发的一个多核编程的解决方案,gcd和其它的多线程技术方案相比,使用起来更加简单和方便。//后台执行的代码dispatch_async(dispatch_get_global_queue(0, 0), ^{ }); dispatch_get_global_queue会开启一个全局队列,我们姑且理解为,系统为我们开启的全局线程。

2016-04-21 17:15:36 329

原创 更新了OS X EI Capitan cocoaPods出现问题

出现问题,没有任何思路,百思不得其解。极端方法就是推到重来,按照以前的办法,试了好几次,不可以。最终,查阅国外博客,发现解决办法,再次总结如下:首先,拆卸掉本地的cocoaPodsgem list --local | grep cocoapods出现下面:cocoapods (0.39.0)cocoapods-core (0.39.0)cocoapods-downloader (0.9.3)c

2016-04-20 21:51:43 298

原创 堆空间和栈空间

堆空间和栈空间 1.栈区 : 编译器自动分配释放,存放函数的参数值(这里需要注意是参数值)局部变量值等,操作方式类似于数据结构中的栈(先进后出)。 2.堆区 :一般由程序员分配释放。若程序员不释放的话,可能由os回收,但是他与数据结构中的堆是两回事,分配方式类似于数据结构中的链表。 3.全局区 :也叫静态数据内存空间,存储全局变量和静态变量,全局变量和静态变量的存储是放一块的,初始化的全局变量

2016-04-17 14:04:55 3510

原创 总结ios开发中,常用的工具CocoaPods

常用的工具之CocoaPods: 我们这里就简单介绍安装和使用: 对于网上一些博客,我也就不想多少了大都是一样的,而且成功的几率很小。最后找到官方文档,虽然全是英文,但是全是干货,我喜欢。废话少说,下面就来点干货: 安装需要Ruby环境,这个在你mac电脑上默认,已经安装好了,下面你要做的就是更新,但是有墙请依次执行下面的命令:gem sources --remove https://

2016-04-14 21:26:01 469 1

转载 iOS中数组遍历的方法及比较

数组遍历是编码中很常见的一种需求,我们来扒一拔iOS里面都有什么样的方法来实现,有什么特点。      因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的。      本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了。[objc] view plain cop

2016-02-26 15:15:10 360

原创 实现OC与JS的交互

2016-02-24 10:20:11 436

原创 Objective-C Runtime

Objective-C 中给一个对象发送消息会经过以下几个步骤:在对象类的 dispatch table 中尝试找到该消息。如果找到了,跳到相应的函数IMP去执行实现代码; 如果没有找到,Runtime 会发送 +resolveInstanceMethod: 或者 +resolveClassMethod: 尝试去 resolve 这个消息; 如果 resolve 方法返回 NO,Runtime

2016-02-21 15:05:42 210

原创 ios开发之Category

什么是Category,有什么作用 Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有

2016-02-21 11:36:09 388

原创 ios提交代码到远程仓库

ios git 把项目提交到远程仓库上想了好久晚上也实验了很多但是,git提交到远程仓库上很多东西写的不是很明白,现在在这里把一些东西细化一下希望对你们有所帮助首先你想提交项目到git 必须在github 上创建一个自己的项目(这个很简单,具体的我就不多解释了)我们以桌面为例 首先打开终端 输入 pwd指令 看看当前所在的位置 如果不是在桌面请 利用终端 把当前位置调整到桌面在终端输入 g

2015-11-08 16:30:49 652

WebViewJavascriptBridge 简化实现(简单易懂)

WebViewJavascriptBridge 简化实现(简单易懂)

2015-11-09

iosmj下啦刷新

iosmj下啦刷新

2015-11-07

数据库文件保存

数据库文件保存

2015-11-07

文本框指定字符串长度

ios限制uitextfield字符长度

2015-11-07

ios格式化输入

ios开源 电话号码格式化 插件你懂得灰常好的插件集合 精心搜集的

2015-11-07

ios插件集合

ios获取字典里的内容并不区分它到底是什么类型(数组、字符、字典等等),它就是一个容器。往里面保存东西的时候,用setValue:forKey:或者setObject:forKey:。就是给你所要保存的对象(value),起一个名字(key),然后set进入到字典里。

2015-08-01

CSF播放器,你懂得

可以满足疙瘩网友的不知问题,如果有什么问题还可以咨询我

2014-11-02

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

TA关注的人

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