语言
文章平均质量分 52
极客猫
开始奋斗,就这样。
展开
-
Effective Objective-C 2.0 第6条:理解“属性”
用OC等面向对象语言编程时,“对象”就是“基本构造单元”,在对象之间传递数据并执行任务的过程就叫做“消息传递”。原创 2015-09-09 16:01:42 · 558 阅读 · 0 评论 -
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 · 1973 阅读 · 0 评论 -
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 · 510 阅读 · 0 评论 -
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 · 505 阅读 · 0 评论 -
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 · 994 阅读 · 0 评论 -
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 · 510 阅读 · 0 评论 -
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 · 734 阅读 · 0 评论 -
Effective Objective-C 2.0 第13条:用“方法调配技术”调试“黑盒方法”
方法调配类的方法列表会把选择子的名称映射到相关的方法实现上,使得“动态消息派发系统”能够据此找到应该调用的方法。这些方法实现均以函数指针来表示,这种指针叫做IMP,原型如下:id (*IMP)(id, SEL, ...) //SEL 表示方法名例如:NSString类可以响应;lowercaseString、uppercaseString、capitalizedString等选择子,每个不同的选择子原创 2016-06-23 14:55:53 · 580 阅读 · 0 评论 -
Effective Objective-C 2.0 第13条:理解“类对象”的用意
对象类型并非在编译期就绑定好了,而是要在运行期查找。有个特殊类型id,他能指代任意的Objective-C对象类型。一般情况应该指明消息接收者的具体类型,这样的话,如果向其发送无法解读的消息,那么编译器会发出警告,而类型为id的对象则不然,编译器假定它能响应所有消息。描述Objective-C对象所用的数据结构定义在运行期程序头文件里,id类型本身也是定义在这里:typedef struct obj原创 2016-06-23 15:38:05 · 519 阅读 · 0 评论 -
Objective-C 运行时整理
Runtime库主要做下面几件事:封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。找出方法的最终执行代码:当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),run原创 2016-06-23 21:25:36 · 417 阅读 · 0 评论 -
Effective Objective-C 2.0 第12条:理解消息转发机制
消息转发两个阶段先征询接收者,所属的类,看其是否能动态添加方法,已处理当前这个“未知的选择子”(unknow selector),这叫做动态解析(dynamic method resolution)。完整地消息转发机制(full forwarding mechanism)动态方法解析对象收到无法解读的消息后,首先调用其所属类的下列类方法:/* * @param SEL 未知的选择子 * @原创 2016-01-05 23:15:52 · 705 阅读 · 0 评论 -
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 · 798 阅读 · 0 评论 -
Effective Objective-C 2.0 第10条:在既有类中使用关联对象存放自定义数据
有时需要在对象中存放相关信息,OC中有一种强大的特性可以解决此类问题,就是“关联对象”。 可以给某个对象关联许多其他对象,这些对象通过“键”来区分。存储对象值时,可以指明“存储策略”,用以维护相应地“内存管理语义”。存储策略由名为 “objc_AssociationPolicy” 的枚举所定义。OBJC_ASSOCIATION_ASSIGN -> assignOBJC_ASSOCIATION_R原创 2015-10-26 00:07:40 · 721 阅读 · 0 评论 -
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 · 651 阅读 · 0 评论 -
Objective-C 内省(Introspection)
内省 内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。明智地使用内省可以使面向原创 2015-09-09 10:27:22 · 636 阅读 · 0 评论 -
Effective Objective-C 2.0 第1条:了解Objective-C语言的起源
Objective-C使用“消息结构”而非“函数调用”。Objective-C语言由SmallTalk演化而来,后者是消息型语言的鼻祖。消息和函数调用之间的区别像://Messaging (Objective-C)Object *obj = [Object new]; [obj performWith:parameter1 and:parameter2];//Function calling(C原创 2015-08-20 10:07:51 · 809 阅读 · 0 评论 -
Effective Objective-C 2.0 第2条:在类的头文件中尽量少引入其它头文件
除非却有必要,否则不要引入头文件。一般来说,应该类的头文件中使用向前声明(@class)来提及别的类,这样会减少编译器编译的时间,同时解决了两个类相互引用的问题,可以避免”循环引用”并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。如果写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明。最好把协议单独放在一个头文件里,不要放在大的头文件里。原创 2015-08-20 10:09:07 · 682 阅读 · 0 评论 -
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 · 753 阅读 · 0 评论 -
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 · 715 阅读 · 0 评论 -
Effective Objective-C 2.0 第5条:用枚举表示状态、选项、状态码
简单枚举类型enum EOCConnectionState { EOCConnectionStateDisconnected, EOCConnectionStateConnecting, EOCConnectionStateConnected,}typedef enum EOCConnectionState EOCConnectionState;这样就可以简写的EOCCo原创 2015-09-05 22:55:54 · 664 阅读 · 0 评论 -
Effective Objective-C 2.0 第9条:以“类族模式”隐藏实现细节
类族模式“类族”是一种很有用的模式,可以隐藏“抽象基类背后的实现细节”。Objective-C的系统框架中普遍使用此模式。如果想创建一个按钮,UIKit中就有一个名为“UIButton”的类,想创建按钮,需要调用“类方法”- (UIButton*)buttonWithType:(UIButtonType)type;该方法返回的对象,其类型取决于传入的按钮类型。然而,不管返回什么类型的对象,他们都继承原创 2015-10-25 23:47:47 · 933 阅读 · 0 评论 -
Effective Objective-C 2.0 第8条:理解“对象等同性”概念
利用“等同性”来比较对象是一个比较常用的概念 ==操作符比较判断两个指针本身,而不是其所指的对象 NSObject协议中声明的“isEqual”方法来判断两个对象的等同性NSString类实现了一个自己独有的等同判断方法,名叫“isEqualToString”,它比“isEqual”快,因为后者不知道受测对象的类型,需要执行额外操作。NSObject 协议中有两个用于判断等同性的关键方法原创 2015-10-25 23:02:42 · 726 阅读 · 0 评论 -
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 · 583 阅读 · 0 评论