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;//withGCC-(id)forward:(SEL)sel:(marg_list)args;//withNeXT/ApplesystemsB.响应方法:-(retval_t)performv:(SEL)sel:(arglist_t)args;//withGCC-(id)performv:(SEL)sel:(marg_list)args;//withNeXT/Applesystems希望实现转发的对象只需用新的方法覆盖以上方法来定义其转发行为。无需重写响应方法performv::,由于该方...

object-c 创建对象

object-c中创建对象的方法:Objective-C创建对象需通过alloc以及init。alloc的作用是分配内存,init则是初始化对象。init与alloc都是定义在NSObject里的方法,父对象收到这两个信息并做出正确回应后,新对象才创建完毕。以下为范例:MyObject*my=[[MyObjectalloc]init];在Objective-C2.0里,若创建对象不需要参数,则可直接使用newMyObject*my=[MyObjectnew];这仅仅是语法上的精简,效果完全相同。若要自己定义初始化的过程,可以重写init方法,来添加额外的工作。(用途类似C++的构造函数constructor)-(id)init{if(self=[superinit]){//必须调用父类的init//dosometh...

object-c 协议(Protocol)

协议是一组尚未实现的方法列表,任何的类均可采纳该协议并给出方法的具体实现。Objective-C在NeXT时期曾经试图引入多重继承的概念,但由于协议的出现而没有实现。协议的功能类似于C++中的多重抽象基类继承或是Java与C#语言中的“接口”。在Objective-C中,包括两种定义协议的方式:由编译器保证的“正式协议”,以及为特定目的设定的“非正式协议”。非正式协议为一个可以选择性实现的一系列方法列表。非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(UnimplementedCategory)的一种称谓,Objetive-C语言机制上并没有非正式协议这种东西,OSX10.6版本之后由于正式协议也可以通...

object-c 类型的声明与实现

Objective-C类型要求区分接口(interface)与实现(implementation)为两个程序区块,这是强制性的。类型的接口通常放置于头文件内,依C语言的惯例以.h作为扩展名;类型的实现则放于以.m为扩展名。Interface接口区段里头清楚定义了类型的名称,实体变量(instancevariable),以及方法。以关键字@interface作为区段起头,@end退出区段。@interfaceMyObject:NSObject{intmemberVar1;//实体变量idmemberVar2;}+(return_type)class_method;//类别分类-(return_type)instance_method1;//实体方法-(return_type)instance_method2:(int)p1;-(return_type)instance_method3:(int)p1andPar:(int)p2;@end方法前...

iOS开发是否应该使用ARC

关于ARC的介绍文章网上已经很多,苹果的官方文档也不少。担心使用ARC会带来问题的同学主要的理由有以下5点:1.担心这个技术方案不靠谱。苹果大多数时候的技术方案都是比较靠谱的,但也有一些技术方案有很多坑,例如storyboard。2.原有的项目在非ARC环境下运行良好,担心迁移成本或引入新的问题。3.苹果以前手工管理内存需要非常小心,稍微不注意应用程序就崩溃了。有过这段经历的iOS开发老手,心里上还是觉得自己手工管理内存更踏实一些。4.使用ARC需要了解ARC的一些细节,还需要引入_bridge等新的关键字,学习成本还是有的。5.以为ARC只能支持iOS5.0以上(这是非常大的误解)。对于上面提到...

Yii Widget的使用

小插件解决大问题,做网站,最喜欢使用这种东西,不需要重写代码,直接调用,传递参数,就得到想要的模块,yii也有次功能,看代码:$this->beginWidget('CBootStrapPortlet',array('title'=>'博文分类',//导航标题'htmlOptions'=>array('class'=>'navnav-pillsnav-stacked'),//样式定义'tagName'=>'ul',//'decorationCssClass'=>'active','titleCssClass'=>'','contentCssClass'=>''));$this->widget('CBootStrapMenu',array('items'=>$this->blogType,'htmlOptions'=>array('class'=>''),));$...

object-c 信息传递

Objective-C最大的特色是承自Smalltalk的信息传递模型(messagepassing),与今日主流的C++差异甚大。Objective-C里,与其说对象互相调用方法,不如说对象之间互相传递信息更为精确。此二种风格的差异主要在于程序如何看待调用方法/传送信息这个动作。C++里类型与方法的关系非常严格清楚,一个方法必定属于一个类型,而且在编译时(compiletime)就已经紧密绑定,你不可能去调用一个不存在类型里的方法。但在Objective-C,类型与信息的关系比较松散,调用方法视为对对象发送信息,所有方法都被视为对信息的回应。所有信息处理直到运行时(runtime)才会动态决定,并交由类型自行决定如何处理收到的信...

object-c Hello World实例

这里示范一个基础的HelloWorld程序。#import<Foundation/Foundation.h>intmain(intargc,char*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];NSLog(@"HelloWorld!");[pooldrain];return0;}以上是Xcode的旧版"HelloWorld"程序代码,在4.3.1xcode的代码为:#import<Foundation/Foundation.h>intmain(intargc,char*argv[]){@autoreleasepool{NSLog(@"HelloWorld!");}return0;}

Yii CRUD操作

对于喜欢操作sql语句的人来说和对于sql语句基础不是很好的,能够明白每个CRUD操作是什么意思很重要,简单的介绍个例子,代码如下:classPostextendsCActiveRecord{public$fixtures=array('posts'=>'Post','tags'=>'Tag',);publicfunctionfindPost(){//调用find时,我们使用$condition和$params指定查询条件。//此处$condition可以是SQL语句中的WHERE字符串,$params则是一个参数数组,//其中的值应绑定到$condation中的占位符。$post=$this->posts('post1');$fPost=Post::model()->find('id=:id',array(':id'=>$post->id));//SELECT*FROM`tbl_post``t`WHERE`t`.`id`=1LIMIT1$fPost=Post::model()->find('?',array($post->id));//SEL...

Yii在IIS下的伪静态处理

Yii在IIS下的伪静态处理是,在根目录建立httpd.ini文件,然后使用IIS的伪静态规则,写入自己需要的规则:我购买的虚拟主机在香港,因为windows的主机比较多,于是我也中招了,于是四处寻求方法,四处尝试,终于找到了适合Yii的伪静态规则:代码如下:[ISAPI_Rewrite]#3600=1hourCacheClockRate3600RepeatLimit32RewriteEngineOn#伪静态规则RewriteBase/RewriteCond%{REQUEST_FILENAME}!-fRewriteCond%{REQUEST_FILENAME}!-dRewriteRule^(.*)/(.*)$$1/index.php?$2RewriteRule!\.(js|ico|gif|jpe?g|bmp|png|css)$index.php[L]我在虚拟机上测试通过了,哈哈,希望对你也有用

Yii-Gii的安装和配置

Gii是基于web的Yiiframework代码生成器。开始配置可以在你的应用程序配置文件中增加以下代码以使用该模块:'modules'=>array('gii'=>array('class'=>'system.gii.GiiModule','username'=>'dev','password'=>'yiidev',),),运行打开浏览器,输入http://localhost/yourapp/index.php?r=gii,使用刚才在配置文件中填的username和password登录。