object-c "分类"(Category) 借用Smalltalk实现中的“分类”概念

在Objective-C的设计中,一个主要的考虑即为大型代码框架的维护。结构化编程的经验显示,改进代码的一种主要方法即为将其分解为更小的片段。Objective-C借用并扩展了Smalltalk实现中的“分类”概念,用以帮助达到分解代码的目的。[1]

一个分类可以将方法的实现分解进一系列分离的文件。程序员可以将一组相关的方法放进一个分类,使程序更具可读性。举例来讲,可以在字符串类中增加一个

...

object-c 与Smalltalk类似的动态类型

动态类型


类似于Smalltalk,Objective-C具备动态类型: 即消息可以发送给任何对象实体,无论该对象实体的公开接口中有没有对应的方法。在C++这种静态类型的语言里,不可能对一个(void*)指针调用任何方 法,编译器会挡下该调用行为。但在Objective-C中,你可以对id发送任何信息(id很像void*,但是被严格限制只能使用在对象上),编译器 仅会发出“该对象

...

object-c 对象发送消息(转发)

Objective-C允许对一个对象发送消息,不管它是否能够响应之。除了响应或丢弃消息以外,对象也可以将消息转发到可以响应该消息的对象。转发可以用于简化特定的设计模式,例如观测器模式代理模式

Objective-C运行时在Object中定义了一对方法:

A.转发方法:

- (retval_t) forward:(SEL) sel :(arglist_t) args; // wit
...

object-c 创建对象

object-c中创建对象的方法:

Objective-C 创建对象需通过 alloc 以及 init。alloc的作用是分配内存,init 则是初始化对象。 init 与 alloc 都是定义在 NSObject 里的方法,父对象收到这两个信息并做出正确回应后,新对象才创建完毕。以下为范例:

MyObject * my = [[MyObject alloc] init];
在 O...

object-c 协议(Protocol)

协议是一组尚未实现的方法列表,任何的类均可采纳该协议并给出方法的具体实现。

Objective-C在NeXT时期曾经试图引入多重继承的概念,但由于协议的出现而没有实现。协议的功能类似于C++中的多重抽象基类继承或是JavaC#语言中的“接口”。在Objective-C中,包括两种定义协议的方式:由编译器保证的“正式协议”,以及为特定目的设定的“非正式协议”。

非正式协议为一个可以

...

object-c 类型的声明与实现

Objective-C 类型要求区分接口(interface)与实现(implementation)为两个程序区块,这是强制性的。

类型的接口通常放置于头文件内,依C语言的惯例以.h作为扩展名;类型的实现则放于以.m为扩展名。

Interface

接口区段里头清楚定义了类型的名称,实体变量(instance variable),以及方法。 以关键字@interfa

...

iOS开发是否应该使用ARC

关于ARC的介绍文章网上已经很多,苹果的官方文档也不少。担心使用ARC会带来问题的同学主要的理由有以下5点:

1.担心这个技术方案不靠谱。苹果大多数时候的技术方案都是比较靠谱的,但也有一些技术方案有很多坑,例如storyboard。


2.原有的项目在非ARC环境下运行良好,担心迁移成本或引入新的问题。


3.苹果以前手工管理内存需要非常小心,稍微不注意应用程序就崩溃了。有过这段经历的iOS开发老

...

Yii Widget的使用

小插件解决大问题,做网站,最喜欢使用这种东西,不需要重写代码,直接调用,传递参数,就得到想要的模块,yii也有次功能,看代码:

$this->beginWidget('CBootStrapPortlet', array(
	                'title'=>'博文分类',//导航标题
	                'htmlOptions'=>array('class'
...

object-c 信息传递

Objective-C最大的特色是承自Smalltalk的信息传递模型(message passing),与今日主流的C++差异甚大。Objective-C里,与其说对象互相调用方法,不如说对象之间互相传递信息更为精确。此二种风格的差异主要在于程序如何看待调用方法/传送信息这个动作。C++里类型方法的关系非常严格清楚,一个方法必定属于一个类型,而且在编译时(compile time)就已经紧

...

Yii CRUD操作

对于喜欢操作sql语句的人来说和对于sql语句基础不是很好的,能够明白每个CRUD操作是什么意思很重要,简单的介绍个例子,代码如下:


class Post extends CActiveRecord{
	public $fixtures=array(
		'posts'=>'Post',
		'tags'=>'Tag',
	);

	public function findPost()
...

Yii在IIS下的伪静态处理

Yii在IIS下的伪静态处理是,在根目录建立httpd.ini文件,然后使用IIS的伪静态规则,写入自己需要的规则:

我购买的虚拟主机在香港,因为windows的主机比较多,于是我也中招了,于是四处寻求方法,四处尝试,终于找到了适合Yii的伪静态规则:

代码如下:


[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
Rep
...

Yii 分页设置

yii自己是带有自动分页功能的。只要在对应的controller里面,类似下面这样鞋代码,就会实现的

$dataProvider=new CActiveDataProvider(
    'Blog',
    array(
    		'pagination'=>array('pageSize'=>10),
    		'criteria'=>array('order'=>'create_da
...

Yii开启错误日志

生产环境中的 Web 应用常需要具有完善的事件日志功能。在我们的博客应用中,我们想记录它在使用时发生的错误。这些错误可能是程序错误或者是用户对系统的不当使用导致的错误。记录这些错误可以帮助我们完善此博客应用。

为启用错误日志功能,我们修改 应用配置 如下,


return array(
    'preload'=>array('log'),
 
    ......

通过上述

...

ubuntu和centos的时间更新操作

在Ubuntu Server上,设置NTP时间同步非常简单,就如下几步:

第一,可以先进行手动更新一次时间(可选):
sudo ntpdate ntp.ubuntu.com

第二,创建一个定时执行的文件:
sudo vim /etc/cron.daily/ntpdate
然后在其中添加一行:ntpdate ntp.ubuntu.com,保存退出。

第三

...