2013年1月 的存档

设计模式(3):工厂模式(Factory Method)

  定义一个用于创建对象的接口,让子类决定将哪一个类实例化,使一个类的实例化延迟到其子类。
  创建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中。创建对象可能会导致大量的重复代码,可能会需要复合对象访问不到的信息,也可能提供不了足够级别的抽象,还可能并不是复合对象概念的一部分。工厂方法模式通过定义一个单独的创建对象的方法来解决这些问题。由子类实现这个方法来创建具体类型的对象。
  在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不用的分配方案。
   阅读更多…

设计模式(2):单例模式(singleton)

  单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
  实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
   阅读更多…

设计模式(1):开篇

  最近计划系统的了解一下设计模式,平常也知道些,但是还是知道的不多,这一段时间深入的参透一下。每一个设计模式大概分为下面的五步去认识,“纸上得来终觉浅,绝知此事要躬行”,先对这常用的23中设计模式有个大概的了解,以后有了锻炼的机会,就可以锻炼了。
1.理论概念(抽象)?
2.具体的例子(具体)?
3.适用于什么的范围?有什么优点,能解决什么问题?
4.有什么不好的地方?
5.简短的代码例子。
  设计模式是经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。
  设计模式分为三种类型,共23类。
创建型模式(5种):单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式(7种):适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式(11种):模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

sqlite3触发器的实战

  触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( REPLACE,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
  举个例子,如果说要删除一个班级和一个班级的学生,写程序得两个步骤,第一次删除一个班级的学生,第二步再删除这个班级,很麻烦,效率也不高,间隔触发器,就是在删除班级的时候,会触发删除该班级的学生,很快,很方便。。
阅读更多…

在Sqlite中通过Replace来实现插入和更新

  你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到数据库中,而这些图书在你下一次编辑之后,重新导入,只是对原有的数据进行修改。以上是一个业务的场景。
  在MSSQL中,你可以使用诸如: 阅读更多…

SQLite学习笔记

1. 无库连接sqlite3

(1) Windows提示符

>sqlite3

SQLite version 3.6.22

Enter “.help” for instructions

Enter SQL statements terminated with a “;”

sqlite>
阅读更多…

浅谈关于nil和 null区别及相关问题

  1、nil和null从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。
  看下面一段代码:

nil -> Null-pointer to objective- c object
NIL -> Null-pointer to objective- c class
null-> null pointer to primitive type or absence of data.

阅读更多…

AFNetworking的学习

  AFNetworking是一个讨人喜欢的网络库,适用于iOS以及Mac OS X. 它构建于在NSURLConnection, NSOperation, 以及其他熟悉的Foundation技术之上. 它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松.例如,他可以使用很轻松的方式从一个url来得到json数据: 阅读更多…

ios开发xcode4.4(ios6)的一些新特性

方法顺序

  如果有以下代码:

 @interface SongPlayer : NSObject 
- (void)playSong:(Song *)song; 
@end 
@implementation SongPlayer 
- (void)playSong:(Song *)song 
{ 
NSError *error; 
[self startAudio:&error]; 
... 
} 
- (void)startAudio:(NSError **)error 
{ ... } 
@end

阅读更多…

iOS系统GCD学习(12):IO资源竞争

概述

  我将分四步来带大家研究研究程序的并发计算。第一步是基本的串行程序,然后使用GCD把它并行计算化。如果你想顺着步骤来尝试这些程序的话,可以下载源码。注意,别运行imagegcd2.m,这是个反面教材。。

原始程序

  我们的程序只是简单地遍历~/Pictures然后生成缩略图。这个程序是个命令行程序,没有图形界面(尽管是使用Cocoa开发库的),主函数如下: 阅读更多…