- 博客(58)
- 资源 (2)
- 收藏
- 关注
原创 Docker基本概念
作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快的多。其次,Docker对系统资源的利用率很高,一台主机上可以同时运行千个Docker容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使的应用的性能很高,同时系统开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只
2016-10-17 10:39:54
645
转载 Toll-Free Bridging
原文链接:http://gracelancy.com/blog/2014/04/21/toll-free-bridging/Toll-Free Bridging有一些数据类型是能够在 Core Foundation Framework 和 Foundation Framework 之间交换使用的。这意味着,对于同一个数据类型,你既可以将其作为参数传入 Core Foundation 函数,也可以将其
2016-09-01 17:56:52
577
原创 iOS CoreAnimation(4)-视觉效果
一、圆角CALayer有一个属性叫做conrnerRadius的属性控制着圆层角的曲率。它是一个浮点数,默认值为0。默认情况下这个曲率值只影响背景颜色而不影响背景图片或者子图层。如果把masksToBounds设置为YES的话,图层里面的所有东西都会被截取。 二、图层边框CALayer有另外两个非常有用的属性就是borderWidth和borderColor。二者共同定义了图层边的绘制样式。这条线
2016-08-25 14:55:29
704
原创 iOS CoreAnimation(3)-图层几何学
一、布局UIView有三个比较重要的布局属性:frame,bounds和center,CALayer对应的叫:frame,bounds和position。为了能清楚区分,图层用了”positioin“,视图用了”center“。frame代表了图层的外部坐标(也就是在父图层上占据的空间),bounds是内部坐标({0, 0}通常是指图层的左上角),center和position都代表了相对于父图层a
2016-08-24 00:18:00
554
原创 iOS CoreAnimation(2)-寄宿图
一、contents属性CALayer有一个属性叫做contents,这个属性的类型被定义为id,意思是可以是任何类型的对象。但是如果contents赋的不是CGImage,那么图层将是空白的。事实上,你真正要赋值的类型应该是CGImageRef,它是一个只想CGImage的结构的指针。UIImage有一个CGImage属性,它返回一个“CGImageRef“,如果把这个值赋值给CALayer的co
2016-08-23 15:33:31
581
原创 iOS CoreAnimation(1)-图层树
CoreAnimation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中。于是这个树就形成了UIKit以及在iOS应用程序当中你所能在屏幕上看到的一起的基础。一、图层与视图一个视图就是在屏幕上显示的一个矩形块,它能够拦截类似于鼠标点击或者触摸手势等用户输入。视图可以相互嵌套。在iOS中,所有的视图都从一个叫做UIView的
2016-08-23 11:01:30
471
原创 iOS CoreAnimation-粒子动画
一、粒子发射器iOS中的粒子效果有两部分组成,一部分为发射器,设置例子发射的宏观属性,另一部分是粒子单元,用于设置相应的粒子属性。粒子发射器是基于Layer层:CAEmitterLayer。其中常用的属性如下:@interface CAEmitterLayer : CALayer//粒子单元数组@property (nullable, copy) NSArray<CAEmitterCell *>
2016-08-22 15:00:08
1928
原创 iOS dispatch_time_t
创建dispatch_time_tdispatch_time_t dispatch_time(dispatch_time_t when, int64_t delta);#define NSEC_PER_SEC 1000000000ull#define NSEC_PER_MSEC 1000000ull#define USEC_PER_SEC 1000000ull#define NSEC_PER_
2016-06-30 09:50:34
857
原创 iOS dispatch_group_t
创建groupdispatch_group_create();group异步执行dispatch_group_async(dispatch_group_t group, dispatch_queue_t queue, block);group执行完毕通知dispatch_group_notify(dispathc_group_t group, dispatch_queue_t queue, bloc
2016-06-28 17:34:48
783
原创 Objective-C Runtime整理(分类和协议)
基础数据类型Categorytypedef struct objc_category *Category;struct objc_category { char *category_name OBJC2_UNAVAILABLE; // 分类名 char *class_name OBJC2_UNAVAILABLE; // 分类所属的类名 struct objc_method_l
2016-06-27 16:07:11
729
原创 Objective-C Runtime整理(方法和消息)
基础数据类型SELSEL叫选择器,是表示一个方法的selector的指针,定义如下:typedef struct objc_selector *SEL;方法的selector用于表示运行时方法的名字,OC在编译时,会依据每一个方法的名字、参数序列,生成一个唯一的整数标识(Int类型的地址),就是SEL。SEL sel1 = @selector(method1);NSLog(@"sel : %p",
2016-06-27 15:48:31
501
原创 Objective-C 运行时(成员变量和属性)
成员变量、属性基础数据类型 Ivar是表示实例变量的类型,其实际是一个指向objc_ivar结构体的指针,其定义如下:typedef struct objc_ivar *Ivar;struct objc_ivar { char *ivar_name OBJC2_UNAVAILABLE; // 变量名 char *ivar_type
2016-06-24 11:13:09
989
原创 Objective-C 运行时整理
Runtime库主要做下面几件事:封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。找出方法的最终执行代码:当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),run
2016-06-23 21:25:36
409
原创 Effective Objective-C 2.0 第13条:理解“类对象”的用意
对象类型并非在编译期就绑定好了,而是要在运行期查找。有个特殊类型id,他能指代任意的Objective-C对象类型。一般情况应该指明消息接收者的具体类型,这样的话,如果向其发送无法解读的消息,那么编译器会发出警告,而类型为id的对象则不然,编译器假定它能响应所有消息。描述Objective-C对象所用的数据结构定义在运行期程序头文件里,id类型本身也是定义在这里:typedef struct obj
2016-06-23 15:38:05
514
原创 Effective Objective-C 2.0 第13条:用“方法调配技术”调试“黑盒方法”
方法调配类的方法列表会把选择子的名称映射到相关的方法实现上,使得“动态消息派发系统”能够据此找到应该调用的方法。这些方法实现均以函数指针来表示,这种指针叫做IMP,原型如下:id (*IMP)(id, SEL, ...) //SEL 表示方法名例如:NSString类可以响应;lowercaseString、uppercaseString、capitalizedString等选择子,每个不同的选择子
2016-06-23 14:55:53
577
原创 iOS 判断是否是否静音
github地址:https://github.com/Rich2k/RBDMuteSwitch集成挺easy的,需要RBDMuteSwitch.h、RBDMuteSwitch.m、detection.aiff三个文件@interface A <RBDMuteSwitchDelegate>@end@implementation A- (void)func { [self beginDete
2016-05-19 12:04:06
6320
原创 iOS检测是否开启定位、是否允许消息通知
iOS 判断是否开启定位+ (BOOL)isLocationServiceOpen { if ([ CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) { return NO; } else return YES;}iOS 判断是否允许消息通知+ (BOOL)
2016-05-19 11:51:55
12725
原创 Python2.7注意点汇总(函数式编程)
1. mapmap()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。>>> def f(x):... return x * x...>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])[1, 4, 9, 16, 25, 36, 49, 64, 81]2. reduce再看reduce的用法
2016-05-13 10:28:27
498
原创 Python2.7注意点汇总(高级特性模块)
1. 切片(以list为例)list[start:end] 获取下标从start到end-1的元素list[:end] 获取下标从0到end-1的元素list[start:end:step] 获取下标从start到end-1,间隔为set的元素2. 迭代如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。默认情况
2016-05-12 16:48:49
504
原创 Python2.7注意点汇总(至函数模块)
教程来自廖雪峰的网站,之前看Git也是他的教程,通俗易懂,非常适合初学者。这系列博客是针对教程中Python的知识点做一个整理。1、2.x还是3.x目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,因为现在Python正在朝着3.x版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在3.x上使用。为了保证你的程序能
2016-05-12 16:08:51
1969
转载 iOS 动态库和静态库
一、什么是库?库是共享程序代码的方式,一般分为静态库和动态库。二、静态库与动态库的区别?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。三、iOS里静态库形式?.a和.framework四、iOS里动态库形式?.dylib和.framework五、framework为什么既是
2016-05-11 10:35:36
1472
原创 iOS 先后执行一组动画源代码
今天看到一个能顺序执行一组Animation的第三方代码,挺简单的,分享粗来.h 文件@interface BRYSerialAnimationQueue : NSObject- (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)
2016-04-20 15:53:21
1188
原创 iOS dispatch_semaphore_t
在GCD中有三个函数是semaphore的操作,分别是:创建一个semaphoredispatch_semaphore_create(int)发送一个信号dispatch_semaphore_signal(dispatch_semaphore)等待信号dispatch_semaphore_wait(dispatch_semaphore, int)注: (1)wait 将信号量 -1
2016-04-20 15:38:06
810
原创 .gitignore 语法规则
.gitignore 配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore 的一些心得。1、配置语法: 以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到
2016-02-19 15:27:14
5504
转载 iOS黑魔法-Method Swizzling
原文链接:http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/需求突然有一天老大过来,说我们要在所有页面添加统计功能,也就是用户进入这个页面就统计一次。我们会想到下面的一些方法:手动添加直接简单粗暴的在每个控制器中加入统计,复制、粘贴、复制、粘贴… 上面这种方法太Low了,消耗时间而且以后非常难以维护,会让后面的开
2016-01-26 15:48:18
550
原创 Effective Objective-C 2.0 第12条:理解消息转发机制
消息转发两个阶段先征询接收者,所属的类,看其是否能动态添加方法,已处理当前这个“未知的选择子”(unknow selector),这叫做动态解析(dynamic method resolution)。完整地消息转发机制(full forwarding mechanism)动态方法解析对象收到无法解读的消息后,首先调用其所属类的下列类方法:/* * @param SEL 未知的选择子 * @
2016-01-05 23:15:52
701
原创 CocoaPods安装与使用
什么是CocoaPodsCocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。CocosPods的意义Cocoapods意义体现在两个方面。第一,在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是ARC环境下的-
2015-12-18 15:12:56
403
原创 RubyGems命令
RubyGems命令详解:我们以目前最新的 rubygems 1.8.16 为例:查看RubyGems软件的版本gem -v更新升级RubyGems软件自身gem update - -system更新所有已安装的gem包$ gem update更新指定的gem包注意:gem update [gemname]不会升级旧版本的包,可以使用 gem install [gemname] –version=[
2015-12-18 13:44:45
666
原创 Iterm2 快捷键介绍
快捷键1. ⌘ + d 横着分屏 / ⌘ + shift + d 竖着分屏2. ⌘ + r = clear,而且只是换到新一屏,不会想 clear 一样创建一个空屏3. ctrl + u 清空当前行,无论光标在什么位置4. 输入开头命令后 按 ⌘ + ; 会自动列出输入过的命令5. ⌘ + shift + h 会列出剪切板历史6. 可以在 Preferences > keys 设置全局快捷键调出 i
2015-12-18 11:01:19
500
原创 Effective Objective-C 2.0 第11条:理解objc_msgSend的作用
动态绑定Objective-C是C的超集,C语言使用“静态绑定”,也就是说在编译期间就能决定运行时所应调用的函数。#import <stdio.h>void printHello() {}void printGoodbye() {}void doTheThing(int age) { if (type == 0) pirntHello(); else
2015-10-27 00:22:24
789
原创 Effective Objective-C 2.0 第10条:在既有类中使用关联对象存放自定义数据
有时需要在对象中存放相关信息,OC中有一种强大的特性可以解决此类问题,就是“关联对象”。 可以给某个对象关联许多其他对象,这些对象通过“键”来区分。存储对象值时,可以指明“存储策略”,用以维护相应地“内存管理语义”。存储策略由名为 “objc_AssociationPolicy” 的枚举所定义。OBJC_ASSOCIATION_ASSIGN -> assignOBJC_ASSOCIATION_R
2015-10-26 00:07:40
717
原创 Effective Objective-C 2.0 第9条:以“类族模式”隐藏实现细节
类族模式“类族”是一种很有用的模式,可以隐藏“抽象基类背后的实现细节”。Objective-C的系统框架中普遍使用此模式。如果想创建一个按钮,UIKit中就有一个名为“UIButton”的类,想创建按钮,需要调用“类方法”- (UIButton*)buttonWithType:(UIButtonType)type;该方法返回的对象,其类型取决于传入的按钮类型。然而,不管返回什么类型的对象,他们都继承
2015-10-25 23:47:47
929
原创 Effective Objective-C 2.0 第8条:理解“对象等同性”概念
利用“等同性”来比较对象是一个比较常用的概念 ==操作符比较判断两个指针本身,而不是其所指的对象 NSObject协议中声明的“isEqual”方法来判断两个对象的等同性NSString类实现了一个自己独有的等同判断方法,名叫“isEqualToString”,它比“isEqual”快,因为后者不知道受测对象的类型,需要执行额外操作。NSObject 协议中有两个用于判断等同性的关键方法
2015-10-25 23:02:42
720
原创 Effective Objective-C 2.0 第7条:在对象内部尽量访问实例变量
属性获取- (NSString*)fullName {return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];}实例变量- (NSString*)fullName {return [NSString stringWithFormat:@"%@ %@", _firstNa
2015-09-09 16:21:13
646
原创 Effective Objective-C 2.0 第6条:理解“属性”
用OC等面向对象语言编程时,“对象”就是“基本构造单元”,在对象之间传递数据并执行任务的过程就叫做“消息传递”。
2015-09-09 16:01:42
553
原创 Objective-C 内省(Introspection)
内省 内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。明智地使用内省可以使面向
2015-09-09 10:27:22
629
原创 Effective Objective-C 2.0 第5条:用枚举表示状态、选项、状态码
简单枚举类型enum EOCConnectionState { EOCConnectionStateDisconnected, EOCConnectionStateConnecting, EOCConnectionStateConnected,}typedef enum EOCConnectionState EOCConnectionState;这样就可以简写的EOCCo
2015-09-05 22:55:54
657
原创 Effective Objective-C 2.0 第4条:多用类型常量,少用#define预处理指令
define ANIMATION_DURATION 0.3特点:预处理指令会把源代码中的ANIMATION_DURATION字符替换成0.3 缺点:这样定义的常量没有类型信息static const NSTimeInterval kAnimationDuration = 0.3;特点:用此方式定义的常量包含类型信息,其好处是清楚地描述了常量的含义。命名方法:若常量局限于某“编译单元”之内,则在前面
2015-09-04 18:17:41
709
原创 Effective Objective-C 2.0 第3条:多用字面量语法,少用与之等价的方法
字面量可以不用使用 [[Class alloc]init] 分配并初始化NSString对象了1. 字面数值NSNumber* someNumber = @1;NSNumber* intNumber = @1;NSNumber* floatNumber = @2.5f;NSNumber* doubleNumber = @3.1415926;NSNumber* boolNumber = @Y
2015-08-20 10:12:33
748
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人