
ios技术
sqCrazy
学生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ios中isa指针
isa指针: OC是一门面向对象的语言,每一个对象都是类的一个实例。在objective-c语言的内部,每一个对象都有一个isa指针,指向该指针的类。每一个类描述了一系例他的实例的特点,包括成员变量的列表,成员函数的列表。每一个对象都可以接收消息,而对象接收消息列表保存在他所对应的类中。当我们初始化一个对象的时候,是怎么发送消息的NSObject *obj=[[NSObject alloc] in原创 2016-04-25 21:27:36 · 6682 阅读 · 0 评论 -
给iOS工程增加Daily Build
前言Daily Build 是一件非常有意义的事情,也是敏捷开发中关于 “持续集成” 的一个实践。Daily Build 对于开发来说有如下好处:保证了每次 check in 的代码可用,不会造成整个工程编译失败。进度跟进。产品经理可以每天看到最新的开发进度,并且试用产品,调整一些细节。很多时候,一个新功能,你真正用了一下才能有体会好或不好,所以 daily build 也给产品经理更转载 2016-04-24 20:17:34 · 347 阅读 · 0 评论 -
使用Safari进行调试
在使用之前需要打开,safari的调试模式,在safari的菜单中,选择Safari ->偏好设置(Preferences) -> Advanced 勾上 ->(在菜单上显示“开发“菜单) 同时在模拟器,或者真机上的把调试模块打开,步骤如下: 之后通过模拟器或者真机,这时你会看到safari上面多出了,开发选项,选择步骤如下:原创 2016-04-24 20:44:06 · 2106 阅读 · 0 评论 -
设置应用内的系统控件语言
1.在UIWebView中长按会弹出系统的上下文菜单. 2.在UIImageOickerController 中会使用系统的照相机界面. 3.在编译状态下的UITableViewCell,处于待删除状态时,会有一个系统删除的按钮, 以上这些空间显示的语言和你手机的语言并不一致,可以通过下面的plist文件设置,如下: 在plist加入: CFBundleLocalizations (原创 2016-04-24 21:04:27 · 351 阅读 · 0 评论 -
对于ios7.0以后的截屏功能
ios 7.0系统自带了api截屏的功能: 多说无谓,注释都在代码里:https://git.oschina.net/Cshaonian/ScreenCapture.git原创 2016-04-24 21:10:27 · 382 阅读 · 0 评论 -
为什么viewdidunload被弃用
前言 我在去年的一篇文章 《iOS5 中 UIViewController 的新方法》 中介绍了 iOS5 引入的关于 ViewController 的新方法。但是现在如果运行该文章中的 Sample 代码的话,你会发现 Log 中不会再出现 viewDidUnload 方法被调用的记录。这是因为在 iOS6 中,viewDidUnload 回调方法被 Deprecated 掉了。查看苹果的文档,转载 2016-04-24 21:26:47 · 600 阅读 · 0 评论 -
忽略XCode编译警告
由于xcode和LLVM在不断的升级,有些时候我们使用的第三方库会在新版的额xcode产生一些编译警告,对于我们确定没有编辑警告的代码我们可以加上-w的编译参数,是的这些文件不会产生编辑警告,如下图:原创 2016-04-24 21:34:52 · 368 阅读 · 0 评论 -
javaScript文件位置调整
JavaScript的js后缀的文件默认被拖到工程中后,是在编译列表中,而不是资源列表中的。这里我们需要手动调整位置否则他就不能打包到ipa文件中,如下: 修改如下:原创 2016-04-24 21:42:38 · 507 阅读 · 0 评论 -
Runloop
一.我们先来介绍runloop的基础知识 1. 什么是runloop ?字面意思理解就是,运行循环。但是,要说的话,我认为是这样的,每一个线程都有一个一一对应的runloop,只有主线程的runloop是自动创建的,子线程runloop是不会自动创建的,需要的时候,需要我们自己去创建,那么问题来了,什么时候去创建runloop,官方文档明确写出,runloop在第一次获取的时候创建,就是说除非我原创 2016-05-21 09:01:24 · 490 阅读 · 0 评论 -
RunLoop 之 NStimer
NSTimer其实就是CFRunloopTimerRef,他们之间是toll-free bridged的。一个NSTimer注册到Runloop后,runloop会为其重复的时间点注册好事件。runloop为什么节省资源,并不会在非常准确的时间点这个Timer。Timer有个属性叫做宽容度,表示了当时间点后,容许有多少最大的误差。如果,某一个时间点被错过了。例如之行了一个很长的任务,则那个时间点的回原创 2016-05-22 22:15:04 · 517 阅读 · 0 评论 -
ios动态下载多种中文字体
引言在今年 WWDC 的内容公开之前,大家都以为 iOS 系统里面只有一种中文字体。为了达到更好的字体效果,有些应用在自己的应用资源包中加入了字体文件。但自己打包字体文件比较麻烦,原因在于:1、字体文件通常比较大,10M - 20M 是一个常见的字体库的大小。大部分的非游戏的 app 体积都集中在 10M 以内,因为字体文件的加入而造成应用体积翻倍让人感觉有些不值。如果只是很少量的按钮字体转载 2016-04-23 22:17:33 · 511 阅读 · 0 评论 -
ios中使用模版引擎渲染HTML页面
在iOS实际的开发中,使用UIWebView来加载数据使用的场景特别多。很多时候我们会动态的从服务器获取一段HTML的内容,然后App这边动态的处理这段HTML内容用于展示在UIWebView上。使用到的API接口为:- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;由于HTML内容通常是变化的,所以我们需要动态生成原创 2016-04-23 22:10:52 · 3788 阅读 · 0 评论 -
为什么catagory可以增加成员方法,不可以增加成员变量
如果把类的实例看成一个c语言的结构体,isa指针就是这个结构体的第一个成员变量,而类的其它成员变量依次排列在结构体中 这里是我们验证,代码地址:oschinahttps://git.oschina.net/Cshaonian/MyIsa.git我们在@autoreleasepool处,设置断点,在控制台输入 p *child 我们可以看到 因为,对象在内存中的排布可以看成一个结构体,该结构体的大原创 2016-04-25 21:42:40 · 461 阅读 · 0 评论 -
验证根元类的isa指针指向自己
我们可以使用oc语言提供的与runtime相关的函数,动态的创建一个新的类,并且通过相关的方法获得isa指针的值,从而了解对象的内部结构解释一下,代码中用到的函数:objc_allocateClassPair //动态的创建新的类class_addMethod //给类增加新的方法objc_registerClassPair //来注册新的类object_getClass //来获得isa指针原创 2016-04-25 21:55:38 · 591 阅读 · 0 评论 -
隐式转换
基本原则:低精度 –> 高精度转换。 不满足该原则,隐式转换是不能发生的。 当然这个时候就可以使用与之相对于的显式类型转换(又称强制类型转换),使用方法如下: double a = 2.0; int b = (int)a;使用强制类型转换会导致精度的损失,因此使用时务必确保你已经拥有足够的把握。原创 2016-04-26 13:52:57 · 463 阅读 · 0 评论 -
浅谈objective-c
oc语言采用 "消息结构",而非函数调用。使用消息结构的语言,其运行时,所执行的代码由运行环境来决定;而使用函数调用的语言,则由编辑器决定。如果,调用的函数是多态的,那么在运行时就要按照"虚方法表"来查出到底应该执行哪个函数实现。而采用消息结构的语言总是在运行时才会去查找所要执行的方法。实际上,编译器甚至不关心接收消息的对象是何种类型。接收消息对象问题也要在运行时处理,其过程叫做动态绑定。 oc语原创 2016-04-29 14:21:21 · 428 阅读 · 0 评论 -
在头文件中尽量少引入其他文件
前言:通俗的话来说,就是如果一个头文件中包含另外一个头文件,如果你引入了这个头文件也会引入另外一个文件的所有内容,将引入头文件的时机尽量延后,只有在确有需要时在引入,这样可以减少类的使用者,所需引入头文件的数量。反之,则会增加编译时间。原创 2016-04-29 14:45:35 · 437 阅读 · 0 评论 -
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 · 633 阅读 · 0 评论 -
修改block 之外的变量
默认情况下,在程序块中访问的外部变量是复制过去的,写操作不对原变量生效,但是你使用关键字 __block 来让其写操作生效__block int myInt=10; void (^MyText)(void)=^{ myInt=20; }; MyText(); NSLog(@"%i",myInt);在这里在谈一下,深拷贝和浅复制: 深拷贝这么说吧,就是原创 2016-04-21 17:41:00 · 257 阅读 · 0 评论 -
UIWindow
UIWindow是最顶层的界面容器,继承自UIView ,所以它具有UIView的所有功能,但是,更多的时候UIwindow是作为UIview的顶层容器存在,每一个ios工程都有一个UIWindow,但是不是唯一,xcode会为我们自动生成UIWindow,并让她成为keywindow并且显示出来。那下面我们来看看系统启动过程中,系统调用UIWindow: 系统创建UIWindow代码:sel原创 2016-04-22 15:06:07 · 924 阅读 · 0 评论 -
iOS开发UI篇—UIWindow简单介绍
iOS开发UI篇—UIWindow简单介绍一、简单介绍UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindowiOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了一个iOS程序之所以能显示到屏幕上,完全是因为转载 2016-04-22 15:06:45 · 320 阅读 · 0 评论 -
method swizzle
认知:oc动态运行时,改变成员方法的指针的指向,使其类成员方法的指针指向我们想要的方法的实现 IMP 指针。这里我们是在 Dispatch Table中操作,其实所谓的方法互换,就是互换了两个sel指针的指向。注意点: 在+(void)load 方法中加载,原因,由于method swizzling会影响到类的全局状态,因此要避免在并发处理中的竞争情况,。 因为swimming会改变全局状态,因此原创 2016-05-22 22:15:53 · 470 阅读 · 0 评论