05 2012 档案

 
从 C++ 到Objective-C
摘要:Objective-C 可以算作 Apple 平台上“唯一的”开发语言。很多 Objective-C 的教程往往直接从 Objective-C 开始讲起。不过,在我看来,这样做有时候是不合适的。很多程序员往往已经掌握了另外一种开发语言,如果对一门新语言的理解建立在他们已有的知识之上,更能 起到事半功倍的效果。既然名为 Objective-C,它与 C 语言的联系更加密切,然而它又是 Objective 的。与 C 语言联系密切,并且是 Objective 的,我们能够想到的另外一门语言就是 C++。C++ 的开发人员也更普遍,受众也会更多。于是就有了本系列,从 C++ 的角度来讲述 Objec 阅读全文
posted @ 2012-05-30 20:19 wenxp2006 阅读(960) 评论(0) 推荐(0)
iphone中如何进行多线程编程
摘要:多线程在各种编程语言中都是难点,很多语言中实现起来很麻烦,objective-c虽然源于c,但其多线程编程却相当简单,可以与java相媲美。这篇文章主要从线程创建与启动、线程的同步与锁、线程的交互、线程池等等四个方面简单的讲解一下iphone中的多线程编程。一、线程创建与启动线程创建主要有二种方式:- (id)init; // designated initializer- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument;当然,还有一种比较特殊,就是使用所谓的convenient method,这 阅读全文
posted @ 2012-05-30 06:19 wenxp2006 阅读(189) 评论(0) 推荐(0)
iPhone/Mac Objective-C内存管理教程和原理剖析(四)系统自动创建新的autorelease pool
摘要:版权声明此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必须包含此版权声明的完整内容。版本1.1发表于2010-03-08四系统自动创建新的autorelease pool在生成新的Run Loop的时候,系统会自动创建新的autorelease pool(非常感谢网友hhyytt和neogui的提醒)。注意,此处不同于xcode在新建项目时自动生成的代码中加入的autorelease pool,xcode生成的代码可以被删除,但系统自动创建的新的auto 阅读全文
posted @ 2012-05-29 07:09 wenxp2006 阅读(129) 评论(0) 推荐(0)
iPhone/Mac Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
摘要:版权声明此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com,且必须包含此版权声明的完整内容。版本1.1发表于2010-03-08三@property (retain)和@synthesize的默认实现在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的propert 阅读全文
posted @ 2012-05-29 07:08 wenxp2006 阅读(160) 评论(0) 推荐(0)
iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式
摘要:版权声明此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com,且必须包含此版权声明的完整内容。版本1.1发表于2010-03-08二口诀与范式1口诀。1.1谁创建,谁释放(类似于“谁污染,谁治理”)。如果你通过alloc、new或copy来创建一个对象,那么你必须调用release或autorelease。换句话说,不是你创建的,就不用你去释放。例如,你在一个函数中alloc生成了一个对象,且这个对象只在这个函数中被使用,那么你必须在这个函数中调用release或a 阅读全文
posted @ 2012-05-29 07:01 wenxp2006 阅读(189) 评论(0) 推荐(0)
iPhone/Mac Objective-C内存管理教程和原理剖析(一)基本原理
摘要:版权声明此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有。欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必须包含此版权声明的完整内容。版本1.1发表于2010-03-08前言初学objectice-C的朋友都有一个困惑,总觉得对objective-C的内存管理机制琢磨不透,程序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有所帮助,也欢迎大家一起探讨。此文涉及的内存管理是针对于继承于NSObject的Class 阅读全文
posted @ 2012-05-29 06:59 wenxp2006 阅读(170) 评论(0) 推荐(0)
虚函数与纯虚函数的区别
摘要:虚函数:为了方便使用多态特性,常常需要在基类中定义虚函数。纯虚函数:1、原因与虚函数相同;2、在很多情况下,基类本身生成的对象是不合理的;虚函数与纯虚函数的区别:1、类里声明为虚函数的话,这个函数是实现的,哪怕是一个空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,编译器就可以在使用后期绑定来达到多态效果;纯虚函数只是一个接口,是个函数的声明而已,要留在子类里面去实现。2、虚函数也可以在子类里面不重载;但纯虚函数必须在子类里面去实现。通常我们把很多函数加上virtual,这是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为很难预料到父类里面的这个函数不用 阅读全文
posted @ 2012-05-27 19:47 wenxp2006 阅读(282) 评论(0) 推荐(0)
协议(protocol) & 委托(delegate)
摘要:协议(protocol),就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。委托(delegate),顾名思义就是委托别人办事,就是当 一件事情发生后,自己不处理,让别人来处理。举个浅显的例子: 我上班的工作主要内容包括 (1)写代码(2)写文档(3)测试程序(4)接电话(5)会见客户(1)(2)我自己全权负责,但是后面(3)(4)(5)我不想或者不方便自己做,所以我想找个助手(delegate)帮我做这些事,于是我定了一个招聘要求(Protocol),里写明我的助手需要会做(3)(4)(5)这三件事。很快,我招到一个助手。 即:我.... 阅读全文
posted @ 2012-05-23 14:59 wenxp2006 阅读(270) 评论(0) 推荐(0)
IOS5中strong和weak的用法
摘要:iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC)strong 用来修饰强引用的属性;@property (strong) SomeClass * aObject;对应原来的@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;weak 用来修饰弱引用的属性;@property (weak) SomeClass * aObject;对应原来的@property (assign) SomeClass * aObject;__weak, __ 阅读全文
posted @ 2012-05-15 21:15 wenxp2006 阅读(1296) 评论(0) 推荐(0)
Memset、Memcpy、Strcpy 的作用和区别(转)
摘要:(1) Memset原型: extern void *memset(void *buffer, int c, int count); 用法:#include <string.h> 功能: 把buffer所指内存区域的前count个字节设置成字符 c。 说明: 返回指向buffer的指针。用来对一段内存空间全部设置为某个字符 例如: char a[10]; memset(a, '\0', sizeof(a)); memset可以方便的清空一个结构类型的变量或数组。 如:struct _test{char ... 阅读全文
posted @ 2012-05-15 06:14 wenxp2006 阅读(403) 评论(0) 推荐(0)
面向对象(OO)程序设计
摘要:前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释:面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 简略来说,面向对象程序设计,指采用了面向对象的方法来进行程序设计。设计指一种把计划、规划、设想通过视觉传达出来的活动过程,它是一种创造性,积累性,实践性的工作。提笔写设计的文章是很有压力的,它不像深入一个知识点一样让人容易有的放矢,一千个读者心中有一千个哈姆雷特,同样的项目两个人来做架构肯定不一样。包.. 阅读全文
posted @ 2012-05-14 15:41 wenxp2006 阅读(203) 评论(0) 推荐(0)
Object-Oriented
摘要:软件危机(Software Crisis)软件技术总是处于不断发展变化中,新工具、新技术相继产生。这就要求软件产业和软件工程师们不停的寻求软件设计和开发的新途径。由于日益增长的软件系统的复杂性和软件产业内部愈演愈烈的竞争,这种要求变得更加紧迫。为了克服这种要求带来的软件危机,必须解决以下问题:1、在系统设计中,如何表现问题的真实实体?2、如何以开放的界面(interface)设计系统?3、如何保证模块(module)的可重用性(reusability)和可扩展性(extensibility)?4、如何开发能够容忍(tolerant)未来可能的变化模块?5、如何提高软件的生产力和减少软件开销?6 阅读全文
posted @ 2012-05-14 15:40 wenxp2006 阅读(200) 评论(0) 推荐(0)
内存堆和栈的区别
摘要:数据结构的栈和堆首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体)。堆像一棵倒过来的树而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实 阅读全文
posted @ 2012-05-14 15:19 wenxp2006 阅读(275) 评论(0) 推荐(0)
const修饰指针的情况分析
摘要:C语言关键字const是用来限定一个变量不允许被改变的修饰符,当它和指针结合的时候有下面2种情况:1、const放在*前面, const char *p1, p1表示指向常量的指针,这时p1本身可以变化,也就是可以重新指向,但是指向的内容不能修改const char *p1 = "hello";p1++; // okp1[0] = 'w'; // compile error2、const放在*后面, char* const p1, 意思是p1是一个const指针,指向一个字符串,这时p1本身不能改变但是指向的内容可以变化,也就是如下代码1 char* con 阅读全文
posted @ 2012-05-14 15:03 wenxp2006 阅读(264) 评论(0) 推荐(0)
OC中的selector
摘要:@selector()基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取. 它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。一.取得selector值. C函数指针 int add(int val) { return val+1; } int (* c_func)(int val); //定义一个函数指针变量 c_func = add ; //把函数addr地址直接赋给c_func object... 阅读全文
posted @ 2012-05-14 14:15 wenxp2006 阅读(5570) 评论(0) 推荐(1)
new与malloc的区别
摘要:1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4.C++程序经常要 阅读全文
posted @ 2012-05-14 10:56 wenxp2006 阅读(197) 评论(0) 推荐(0)
delegate VS notification
摘要:1、Delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate极值使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。Notification:消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。2、delegate比notification效率高。3、delegate方法比notification更加直接。delegate方法往往需要关注返回值,也就是delegate方法的结果。比如-win 阅读全文
posted @ 2012-05-13 20:46 wenxp2006 阅读(317) 评论(0) 推荐(0)