- 博客(48)
- 收藏
- 关注
转载 block和函数指针有什么区别
block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传递参数。同时block本身也可以被作为参数在方法和函数间传递,这就给予了block无限的可能。 block和函数指针有什么区别? 第一个区别,函数指针是对一个函数地址的引用,这个函数在编译的时候就已经确定了。而block是一个函数对象,是在程序运行过程中产生
2015-06-17 21:32:27
1445
原创 libsqlite3.dylib与libsqlite3.0.dylib的区别
在我们添加数据库框架时,在搜索框中输入sqlite关键字,下面列表区会显示libsqlite3.dylib,libsqlite3.0.dylib。 此时我们选择libsqlite3.dylib。那么libsqlite3.dylib与libsqlite3.0.dylib的区别是什么? 刚开始一直以为是两个版本的, 直接引用libsqlite3.dylib不就
2015-06-08 09:20:13
1117
转载 OC release之后 retainCount为何为1
在XCode中加入如下代码: UILabel *label=[UILabel alloc];[label setText:@"TestLabel"];NSLog(@"%d",[label retainCount]);[label release];NSLog(@"%d",[label retainCount]);理论上说,第一句话alloc了一个label,其保留计数器值为
2015-06-03 22:35:01
1500
1
转载 ARC机制的基本规则及强制规定
ARC机制基本规则:delegate使用方法:@property (assign) xxxDelegate delegate;delegate和outlet 应该用 weak 属性来声明在ARC机制下,彻底忘掉retain、release、retainCount和autorelease。以前我们在需要安全使用一个对象时,往往会将该对象retain住,在不需要的时候进行release
2015-06-03 21:49:40
1106
转载 C语言条件编译及编译预处理阶段
一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。 在C 语言中,并没有任何内在的机制
2015-06-01 11:46:39
574
转载 Objective-C的内省(Introspection)机制
内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象是否遵循特定的协议,以及是否可以响应特定的消息。NSObject协议和类定义了很多内省方法,用于查询运行时信息,以便根据对象的特征进行识别。明智地使用内省可以使面
2015-06-01 11:32:08
522
转载 关于OC中消息转发机制的理解以及在项目中的实际应用
一、什么是消息转发?@selector 是什么?1一种类型 SEL2代表你要发送的消息(方法), 跟字符串有点像, 也可以互转.: NSSelectorFromString() / NSSelectorFromString()3可以理解为类似函数指针的东西--是能让Objective-C动态调用方法的玩意.--是 object-c 的
2015-06-01 11:19:20
868
转载 OC运行时编程指南
目录[+]OC运行时编程指南介绍OC这个语言尽可能的将一些决定从编译和链接时推迟到运行时。它会尽可能的动态的处理事情。这意味这个语言 不仅需要一个编译器,还需要一个运行时系统去执行编译过的代码。这个运行时系统扮演着对于OC这个语言操作系统的的角色,使得这个语言得以运行。这个教程将探究NSObject这个类以及OC这个语言和运行时系统是如何进行交互的。
2015-06-01 11:09:33
860
转载 C中的预编译宏定义
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过
2015-06-01 11:04:32
489
转载 OC中的宏定义
1、先来几个常用的:[csharp] view plaincopy// 是否高清屏 #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UISc
2015-06-01 11:02:40
1601
转载 OC Category(类别)
类别(Category)的基本概念 封装是面向对象的一个特征,OC也不例外,但是有的时候我们会碰到这样的一种情况,封装了一个类,不想再动它了,可是随着程序功能的增加,需要在那个类中增加一个小小的方法,这是我们就不必再在那个类中做修改或者在定义一个子类,只需要在用到的地方随手添加一个该类的类别(Category)即可。 注:(1)在类别中定义的方法,会成为原始
2015-05-31 18:54:13
630
转载 OC的动态特性
OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装、继承、多态。他具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。整体来说,确实是一门不错的编程语言。 现在,让我来想想OC的动态语言特性。OC的动态特性表现为了三个方面:动态类型、动态绑定、动态加载。之所以叫做动态,是因为必须到运行时(run time)才会做一些事情。
2015-05-31 18:27:35
695
原创 OC 中的方法重载?
OC中没有严格的方法重载 原因:OC不允许方法名相同。 注: OC也没有运算符重载一说。 例如: -(void)Test:(NSInter)one; -(void)Text:(float)two; 上面两个方法名相同。在OC中是不允许的。 注: oc中方法名包括后面的冒号。总结: oc和c++、jav
2015-05-31 17:18:51
2489
原创 如何让自己代码在优快云博客中进行<代码块>显示?
操作非常简单 : 直接上图 点上图中箭头所指的图标然后选择编程语言选择好语言后 在下面的框里 黏贴代码 点确定即可
2015-05-31 14:21:50
992
1
原创 选择排序优化算法
优化一: #include #define N 10 int main(){ int a[N],max,k,temp,j; for(int i=0;i { scanf("%d",&a[i]); } for(i=0;i { max=i
2015-05-31 13:59:26
711
转载 oc中谓词的使用(NSPredicate)
OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据。非常方便。在Java中是没有这种技术的,但是有开源的框架已经实现了此功能。下面来看一下具体的例子吧:Person.h[objc]
2015-05-29 09:41:22
888
转载 调用nil对象的方法(Calling Methods on Nil)
在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。 这个技术被framework通过多种不同的方式使用。最主要的就是我们现在在调用方法之前根本无须去检查这个对象是否是nil。假如我们调了nil对象的一个有返回值的方法,那么我们会得到一个nil返回值。
2015-05-29 09:20:07
1407
转载 oc中数组的四种遍历方式及比较
因为iOS是兼容C语言的,所以C语言里面的最最常见的for循环遍历是没有问题的。 本文中用的数组是获取的系统的语言数组,大约有30多个数据,虽然还不够模拟大批量的数据,但对于方法的验证是没有问题的了。[objc] view plaincopyNSArray *langArray = [[NSUserDefaults stan
2015-05-29 09:07:42
2186
原创 c字符串与NSString之间的转换
char *s = "c String"; NSString *s1 = @"NSString"; 注:NSLog(@"NSString字符串 %@",s1); 与c区别的是:此处的s1是字符串对象。所以要用%@格式输出。 转换方法: NSString转c字符串: char *s = [s1 UTF8String]; c转NSString字符串:
2015-05-28 17:36:27
719
转载 OC中的构造函数
OC中的构造函数实际上就是初始化方法。即init方法。总结:1. 如果是无参构造函数,函数名必须是init。返回类型必须是id,函数前面必须是“-”号, 如:- (id)init;。2. 系统会自带一个无参的构造函数,作用是将当前对象的所有成员的内容初始化为0。3. self在此处表示当前对象。 注:当前对象为调用该函数的对象。4. 如果有多个构造函数或者
2015-05-28 16:58:37
892
转载 OC反射机制
什么是反射机制? 大部分的动态反射支持来自NSObject 类。NSObject是所有类(除了一些很少见的例外)的根类。所以基本常用到的类应该都可以支持反射1. 通过类名的字符串形式实例化对象 Class class="NSClassFormString"(@"Teacher"); Teacher *tea=[[
2015-05-28 11:05:33
2162
转载 我们说的oc是动态运行时语言是什么意思?
多态。 主要是将数据类型的确定由编译时,推迟到了运行时。 这个问题其实浅涉及到两个概念,运行时和多态。 运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。 多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的
2015-05-28 10:47:35
2354
转载 Const关键字
我只要一听到被面试者说:"const意味着常数"(不是常数,可以是变量,只是你不能修改它),我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可
2015-05-27 18:19:22
356
转载 堆和栈的区别(经典)
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两
2015-05-27 17:17:18
352
转载 oc中的扩展
对OC类的扩展总结如下: 共有4个: 1、子类 subClass 作用: 可以使用类的继承来增添父类的变量和方法。 写法:在.h文件中 @interface Student : Person 2、类别(Category) 作用: 可以增添父类的功
2015-05-27 16:27:12
740
转载 OC中的description方法
description方法包括类方法和对象方法。(NSObject类所包含)-description(对象方法)+description(类方法)一,description方法1.NSLog回顾 众所周知,我们可以用NSLog函数来输出字符串和一些基本数据类 int age = NSLog( @" age is %i", age);
2015-05-27 11:57:46
1044
原创 OC 继承
OC继承的特点:@1. 继承是单向的,不能相互继承。@2. 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为@3. OC中只允许单继承@4. 继承的内容:所有实例变量和方法。 @5. OC中所有的方法(消息),默认都是公有的。修饰符: private: 私有成员,不能被外部函数访问(使用)
2015-05-27 10:51:43
486
原创 OC中的多态
多态的前提: 必须存在继承关系,在代码中的表现形式就是父类类型保存子类类型,即父类的指针指向子类对象。多态的使用: @1. 父类的引用指向子类的对象,发送消息,调用的是子类对象的方法。 @2. 父类的引用指向本类的对象,发送消息,调用本类的方法。 在多态下,父类的引用可以指向子类的引用,当编译的时候,编译器无
2015-05-25 21:12:43
602
转载 OC中self与super
个人理解:@1. self是类的隐藏的参数,指向当前调用方法的对象(类也是对象,类对象),另一个隐藏参数是_cmd,代表当前类方法的selector。@2. super并不是隐藏的参数,它只是一个"编译器指示符",super 就是个障眼法,总而言之》self与super指向的都是相同的消息接受者@3. 当使用self调用方法时,会从当前类的方法列表中开始
2015-05-25 19:34:00
683
转载 静态存储与动态存储
变量的存储方式可分为“静态存储”和“动态存储”两种 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。5.5.1节中介绍的全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即
2015-05-25 17:26:00
1316
转载 OC 异常处理
Object-C语言的异常处理符号和C++、JAVA相似。再加上使用NSException,NSError或者自定义的类,你可以在你的应用程序里添加强大的错误处理机制。异常处理机制是由这个四个关键字支持的:@try,@catch,@thorw,@finally。当代码有可能出现异常时,我们把他放到@try语句块中。@catch()块包含了处理@try块里的抛出的异常的逻辑。无论异常是否发生,@fi
2015-05-25 17:01:52
1337
原创 OC 协议
OC中的协议相当于Java中的接口。协议实际上就是定义了一组方法,然后让其他类去实现这些方法。是多个类共享一个方法列表.协议中列出的类没有响应的实现,由其他类来实现。协议的定义格式为: @protocol 协议名 方法 @end例如:@protocol
2015-05-25 11:37:52
641
转载 为什么要优先使用组合 而不是继承?
继承具有如下优点: 实现新的类非常容易,因为基类的大部分功能都可以通过继承关系自动赋予派生类;修改或者扩展继承来的实现非常容易;只要修改父类,派生的类的行为就同时被修改了。初学面向对象编程的人会认为继承真是一个好东西,是实现复用的最好手段。但是随着应用的深入就会发现继承有很多缺点:继承破坏封装性。基类的很多内部细节都是对派生类可见的,因此这种复用是“白箱复用”;如果基类的实现发生改
2015-05-25 11:27:13
4484
原创 优先使用组合 而不是继承?
面向对象功能复用的两种最常用技术是类继承和对象组合(object composition)。继承和组合都能达到一个代码复用的效果,但是类的继承通常是白箱复用,对象组合通常为黑箱复用。类继承是白箱复用,被继承的类对其继承者是透明的。因此会破坏其内部结构。之间的依赖程度高。对象组合是黑箱复用,对象之间对彼此的结构不清楚,只需要关心接口。对象之间的依赖低。
2015-05-25 11:07:47
1063
原创 OC 中 Nil nil NULL NSNull 的区别
nil:对象的空指针 是一个空对象Nil: 类的空指针 是一个空类NULL:其它类型的空指针,如一个c类型的内存指针, 是一个值NSNull:在集合对象中,表示空值的对象 注意:1. 若对象为nil: [obj test]将返回NO,而不是NSException(抛出异常)。 若对象为NSNul
2015-05-23 21:52:22
661
原创 Objective-C @class与#import的区别
#import A 会包含被引用A类的所有信息,包括被引用类的变量和方法;@class B 只是告诉编译器在这个文件中,B类只是声明,具体这个类有什么信息,这里不需要知道。等实现文件中真正需要的时候,才会真正查看B类中的信息。 在.h里 @class B; 在.m里 #import "B.h"@class的主要作用是 :1.
2015-05-23 21:35:47
382
转载 SEL数据类型的简单知识点——和方法有关
(1)类里面的方法都是被转换成SEL变量进行存储的。(2)放类声明一个对象,对象调用方法的时候,系统会被这个方法转换成SEL,然后拿这个SEL到类方法中去匹配。(3)我们可以自己手动把方法转换成SEL,然后用这个SEL去查找方法。[objc] view plaincopy#import #imp
2015-05-23 21:29:23
539
转载 Objective-C id为什么可以存放任意类型的对象?
在 Objective-C中id类型的对象可以转换为任何一种对象,有点类似与void*指针类型的作用。下面简要介绍一下id类型。 id标志符:通用对象类型。id类型是一个独特的数据类型,可以转换为任何数据类型,即id类型的变量可以存放任何数据类型的对象。这是为什么呢?还是从OC的内部实现机制上来分析吧! 在内部处理上,id类型被定义为指向对象的指针
2015-05-23 21:22:42
1142
转载 Objective-c中@interface、@implementation、@protocal
以下Objective-c简称OC从事java开发的程序员们都知道,在java中interface是接口的意思,java中类是用class声明,接口用interface声明,是两个独立的部分,只有在类声明要实现某个接口时,他们两者才建立了关系,例如:[html] view plaincopyprint?interface AI{
2015-05-23 21:09:38
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人