- 博客(16)
- 收藏
- 关注
原创 编写高质量的OC代码--------对象、消息、运行时
第6条:理解“属性”这一概念 “属性”是Objective-C的一项特性,用于封装对象中的数据。属性通过存取方法访问。编译器在编译期会自动合成一套存取方法,用以访问给定类型中具有给定名称的实例变量。 使用@synthesize语法可以指定属性对应实例变量的名字。但是不建议这么做,因为如果所有人都使用默认的命名方案,那么写出来的代码大家都能看懂。 使
2017-05-21 16:10:25
736
原创 编写高质量的OC代码--------熟悉Objective-C
第1条:了解Objective-C语言的起源 1、Objective-C的消息结构 Objective-C使用“消息结构”而非“函数调用”。消息结构与函数调用的关键区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定;而使用函数调用的语言,由编译器决定。如果函数调用是多态的,那么在运行时就要按照“虚方法表”来查出到底应该执行哪个函数实现。而采用消
2017-05-19 08:41:07
456
原创 GCD与并发编程
一、关于多线程 1、并行与并发 并发为逻辑上的同时发生。在多线程操作时,如果系统是单核CPU,则它根本不可能同时进行一个以上的线程,它只能把CPU运行时间划分成极短个时间段,再将时间段分配给各个线程执行。这样CPU快速的在不同的线程之间切换,由于时间间隔较短,使人感觉多个任务在同时运行。 并行为物理(实际)上的同事发生。在多核CPU中。当一个CPU执行一
2017-04-16 13:41:26
318
原创 深入探究Blocks----------内存管理
一、Block的本质 在底层Block是以C语言结构体实现的,而在OC中Block的本质即为OC对象。 通过 "clang -rewrite-objc” 对OC代码进行重新 ^{printf("tempBlock");}; 这个Block会被转换成如下结构: struct __block_impl {
2017-03-23 08:25:07
759
原创 深入探究Blocks----------截获不同种类的自动变量
Blocks是C语言的扩充。可以用一句话来表示Blocks的扩充功能:带有自动变量(局部变量)的匿名函数。Block底层实现是以C语言结构体实现的,在OC中Block即为Objective-C对象。 所谓“带有自动变量”意味着在执行Block语法时,Block语法表达式所使用的自动变量被保存到Block的结构体实例中。本文主要对从Block内部访问不同种类变量的一些特性进行探究。
2017-03-17 08:13:08
429
原创 深入探究OC内存管理
前言:本篇内容假设您已经对内存管理有了基础的理解。如retain、release、autorelease、autoreleasepool的释放及使用、引用计数式内存管理概念等。本篇内容将围内存管理进行一些深入的探究。一、内存管理的思考方式 1.1、内存管理的黄金法则 自己生成的对象自己持有。 非自己生成的对象,自己也能持有。
2017-02-19 15:58:12
477
原创 深入理解Dispatch Queue(一)
Dispatch Queues提供了一种简单的方式让我们在App中实现异步和并发。任务的概念:一个任务是我们的程序需要执行的一个独立的工作。我们可以通过将相应的代码放到一个函数或一个block中并将其添加到调度队列中来定义任务。可以将调度队列理解为一个管理我们提交过的任务的对象。调度队列遵循先入先出的规则,提交到队列中的任务总是以相同的顺序开始启动的。GCD为我们提供了三种调度队列
2016-07-03 20:07:44
10304
1
原创 runtime(三)应用 消息转发
OC 中方法调用是以消息传递实现的[obj foo] 等同于 objc_msgSend(obj,@selector(foo))类的底层构造struct objc_class { Class isa OBJC_ISA_AVAILABILITY; //isa指针 #if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE;
2016-07-03 20:05:54
371
原创 runTime(二)应用 Method Swizzling
Method swizzling 就是改变现有selector 所关联的方法的实现。底层原理为,利用runTime更改类底层方法调度表的映射,在完成映射更改后,这样调用既有的selector就会改为调用更改后的方法实现。从而达到方法替换的目的。在开发中合理的利用Method swizzling可以为我们减少很多冗余的工作。假设我们想追踪用户在每一个视图控制器的停留时间,不要
2016-06-05 06:14:12
376
原创 OC Runtime(一)一些底层实现原理
runtime是一个由C语言和汇编编写的运行时库。runtime为OC提供 了面向对象的能力。他的作用体现在,加载类的信息、调度方法、方法的转发等。使得 OC面向对象编程成为可能。Selector 底层实现为C语言结构体,selector可以唯一标识一个你想要调用的OC方法。在runtime底层它是这样定义的typedef struct objc_selector *SEL;并
2016-05-29 10:23:47
2467
原创 利用NSURLProtocol实现webView缓存
注册自定义protocol handler MyURLProtocol- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [NSURLProtocol registerClass:[MyURLProto
2016-05-15 11:13:27
614
原创 iOS开发进阶之旅-自定义UICollectionViewFlowlayout
无疑,iOS6引入的UICollectionView是UIKit视图类中的新星。UICollectionView在各个方面都有一定的UITableView的影子。而,相比于UITableView更强的定制性,更大的灵活性是UICollectionView完全超越UITableView的一点。UICollectionView和UITableView都是dataSource和delegat
2016-03-27 18:09:58
2722
原创 iOS开发进阶之旅-WebViewJavascriptBridge的使用
由于公司是一个电商平台,一些活动页面、商城首页对于灵活性要求比较高,对于这些灵活的页面,利用h5来开发是再合适不过的了。由于需求的驱动,在git上找到了WebViewJavascriptBridge,来实现h5与native的进行一些数据上的交互。经过一段时间的使用,对其有了一定的理解在此总结一下。乍一看到WebViewJavascriptBridge的sample时,被里面的各种回调搞的有点
2016-03-13 20:11:28
2017
原创 iOS进阶之旅-图片裁剪
关于UIGraphicsBeginImageContext(CGSize size);UIGraphicsBeginImageContextWithOptions(CGSize size,BOOL opaque, CGFloat scale);UIGraphicsBeginImageContext开启指定区域的图形上下文UIGraphicsBeginImageC
2016-03-06 09:57:29
542
原创 iOS进阶之旅-可交互式转场动画
iOS7苹果为开发者引入了一系列新的API。其中一个尤为出色的API是一个新的视图控制器转换API。有趣的是,对于这个API苹果大量使用了协议,而不是具体的对象。虽然有点奇怪,但这种定义方式为我们提供了极大的灵活性,在深入探讨这个API之前,让我们看一下另一个iOS7的新特性。注意导航控制器在iOS7中默认行为的改变,在导航控制器不同视图切换之间的动画在iOS7之后现在略有不懂,它是可交互的,
2016-02-28 18:18:28
2299
原创 iOS进阶之旅-视图控制器控制与转换
iOS中控制器协调了后台数据与屏幕上展现的界面。在一个好的MVC设计模式中,控制器中用来处理很多必不可少的应用程序逻辑。UIKit提供了许多内置的视图控制器如UITabBarController或UINavigationController视图控制器。有了这些,正常开放中我们可以轻易的搭建出app的视图控制器框架。但有时候我们需要或者想要更多自定义的东西,本文将讨论一些有用的技术,视图控制器控制与
2016-02-21 20:45:15
537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人