objectivec的优缺点 object-c object-c-发展历史,object-c-优点及缺点

object-c通常写作objective-c或者obj-c,是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。Objective-C可以在gcc运作的系统写和编译,因为gcc含Objective-C的编译器。在MAC OSX系统下,运用苹果提供的SDK等开发工具包,可以用来做IOS开发,开发后的程序在Iphone虚拟机中进行测试,运用的主要语言为Object-c。与C#类似。Object-c仅支持单一父类继承,不支持多重继承。

object c_object-c -发展历史

二十世纪80年代初布莱德・确斯(Brad Cox)在其公司Stepstone发明Objective-C。他对软件设计和编程里的真实可用度问题十分关心。 Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

object c_object-c -优点及缺点

Objective-C是非常“实际”的语言。它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反,ObjC写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的“死亡时间”,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep),Apple在其Mac OS X 10.3中仍未引入这个功能。另一个问题是ObjC不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类别和函式均有“NS”作为前缀,例如NSObject或NSButton来清楚分辨它们属于Mac OS X核心;使用“NS”是由于这些类别的名称在NeXTSTEP开发时定下。虽然Objective-C是C的母集,但它也不视C的基本型别为第一级的对象。和C++不同,Objective-C不支援运算子多载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。

object c_object-c -和C++的比较

单一继承:Objective-C不支持多重继承,(同Java和Smalltalk),而C++语言支持多重继承。动态:Objective-C是动态定型(dynamicaly typed)所以它的类库比C++要容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objecive-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk 看来无误的程序拿到Simualr 67那里就无法通过。从很多方面来看,C++和Objective-C的差别,与其说是技术上的, 不如说是思维方式上的。

object c_object-c -扩展的关键字

@interface

类型声明,类似于c++中的class,区别在于Object c中的声明与实现是强制分开的,@interface关键字用于类型的声明,包括数据成员、方法声明、属性等。方法的参数传递采用中缀符的形式,利用“:”分割参数名和被传递参数,类型的声明以@interface开头,以@end结束,通常一个类型的声明采用下面的结构:

@class someOtherObject //外部类型声明

someObject:NSObject //继承的类型

{

int i; //成员变量

}

-(id)someMethod:(int)someArg someOtherArgName:(int)someOtherArg; //对象的方法

+(id)someMethod:(int)someArg; //类方法

-(id)init; //初始化方法

int num; //属性

@implementation

对应于@interface的类型声明,@implementation表示一个类型的实现过程,同样以@end结束,实现的格式通常如下:

@implementationsomeObject

-(id)someMethod:(int)someArg someOtherArgName:(int)someOtherArg

{

//实现代码

}

@synthesize num=i; //将属性与变量进行对应

@end

new、alloc

Object C中的方法调用形式采用消息发送的方式,通常调用的形式如

[someObject someMethod:firstArg someOtherArgName:otherArg]

实例的初始化也采用消息发送的形式,可以简单的调用类型的new方法来获取一个实例对象,简单实例化的方法通常是:

someObject *obj = [someObjectnew]; //类的实例化

new方法的实际过程是调用alloc和init方法,因此如果需要采用自定义的方法来初始化实例,则需要自己重写init方法,通常的初始化方式为:

someObject *obj = [[someObject alloc] init]; //采用无参数的init实例化

someObject *obj = [[someObject alloc] initWithArg:Arg]; //采用参数的实例化

@class

@class是一个前向引用声明,类似于C++中的friend友元声明,其作用是告诉编译器其后面的字段代表一个类型名称,尽管不知道类型的具体实现,但是只需要将其作为一个类型名称处理即可。通常在使用复合的结构时可以采用@class来减少头文件的相互引用,如果出现循环依赖,则需要依靠@class来避免引用的死循环。通常使用形式为:

someOtherObject;

@interfacesomeObject:NSObject

{

someOtherObject *obj;

}

@end

@property

尽管可以使用obj->arr的形式去强制读取对象的成员变量,但是良好的编程形式是对外界提供成员变量的读写接口。@property关键字提供了外界对成员变量的访问接口,其本质是为某一个属性提供set和get操作。根据不同的需要,可以添加readonly(只读,相当于只添加get不添加set方法)或者readwrite(读写,如果不添加则为默认);还有三种赋值方式可选:assign(直接赋值,通常用于基本类型),retain(释放旧值,增加新的retaincount),copy(常用语字符串,生成一个新的拷贝)。通常使用的方式如下:

someObject:NSObject

{

int i; //成员变量

}

(assign,readonly) int num; //属性

@synthesize

与@property对应,将一个外在属性与成员变量相关联,定义在@implementation中,如果属性名与变量名一致则可以省略变量名。常用方法:

@implementation someObject

@synthesize num=i; //将属性与变量进行对应

//如果属性名也为i,则可以直接写为 @synthesizei

@end

内存管理

Object C采用引用计数的方式进行内存管理,由于所有的对象都继承于NSObject,因此所有的对象都可以接受NSObject的三个方法:

-(id)retain;

objectivec的优缺点 object-c object-c-发展历史,object-c-优点及缺点

-(void)release;

-(unsigned)retainCount;

retain方法将对象的引用计数加一并返回该对象,release将引用计数减一,retainCount方法返回对象当前的引用计数。当采用new、alloc、copy方法创建一个对象时,它的引用计数被置为1,如果程序中对该对象进行操作,则应根据需要,通过调用retain和release方法来保证该对象在不需要的时候被清除。当一个对象的引用计数被置为0后,系统会自动向对象发送一个dealloc消息,将其占有的资源释放。通常情况下,如果一个对象的初始化过程调用了其他资源,则应该重写改对象的dealloc过程,保证在对象的销毁期正确释放这些资源。

为了更加方便的进行能存管理,cocoa中提供了一个自动释放池(autorelease pool)的概念,每一个类都继承了一个autorelease方法,当调用对象的autorelease方法时,改对象会被加入到开始创建的自动释放池中。当程序进行到不再需要自动释放池中的对象时,将自动释放池释放的时候会向池中的所有对象发送一个release消息,从而保证不再需要的对象被正确的释放。通常的用法如下:

NSAutoreleasePool *pool;

pool = [[NSAutoreleasePool alloc] init];

someObject * obj = [[someObject alloc] init];

[obj autorelease]; //加入自动释放池

//其他代码

[pool release]; //执行该语句时,系统会向池内所有的对象发送release消息;在这个例子中,如果对obj进行的其他retain操作和release操作保持一致的话,则会将obj的引用计数变为0,从而调用它的dealloc方法进行资源释放

Object C进行内存管理的3条规则是:

类别

类别是为现有的类提供一个新的方法的方法,即使没有一个类的源代码,仍然可以向类中添加一个方法以方便使用。类别的主要目的有3个:将类的实现分散到多个不同的文件或框架中,创建对私有方法的前向引用,向对象添加非正式协议。

类别的声明方法:

@interfacesomeObject (someProtocal)

-(void)someMethod;

类别的实现方法:

someObject(someProtocal)

-(void)someMethod

{

}

@end

@protocol

Object C中的协议类似于java中的接口,通过关键字定义一个或多个需要遵从协议的对象实现的方法,协议定义的方法:

@protocolsomeProtocol

-(void)someMethod;

@end

采用协议的方法是在类声明时使用尖括号注明其需要使用的协议:

@interfacesomeObject:NSObject

在类实现时需要将协议中规定的方法都予以实现。

Object C 2.0增加了2个新的协议修饰符@optional和@required,可以规定协议中的方法是否为必须实现的方法。

  

爱华网本文地址 » http://www.413yy.cn/a/8103350103/66845.html

更多阅读

转载 谷歌金山词霸的优缺点 谷歌金山词霸在线翻译

原文地址:谷歌金山词霸的优缺点作者:苗虹谷歌金山词霸发布后,马上下下来进行试用。总体上感觉不错,但也有些不足,下面说说它的优缺点。主要优点:1、免费!以后可以光明正大的用“D”版了,哈哈。2、生词本功能非常的爽,而且可以导出为文本文

杉木家具的优缺点 杉木家具优点

杉木家具优点――简介  现在购买家具都希望是环保材料,实木家具是个不错的选择。在实木家具中,杉木家具较为畅销。简单的说下杉木家具的畅销优点。杉木家具优点――方法/步骤杉木家具优点 1、  杉木家具在外观上是一种自然木纹,纹

sbr工艺的优缺点 SBR SBR-优点,SBR-工艺形式

一种按间歇曝气方式来运行的活性污泥污水处理技术,又称序批式活性污泥法。与传统污水处理工艺不同,SBR技术采用时间分割的操作方式替代空间分割的操作方式,非稳定生化反应替代稳态生化反应,静置理想沉淀替代传统的动态沉淀。SBRSBR是

可转换债券的优缺点 可转换债券的优缺点是什么

  可转换债券是债券的一种,可以转换为债券发行公司的股票,通常具有较低的票面利率。下面爱华网小编为大家整理了相关知识,欢迎参阅。  可转换债券的优缺点  优点  a.筹资成本较低:可转换债券给予了债券持有人以优惠的价格

声明:《objectivec的优缺点 object-c object-c-发展历史,object-c-优点及缺点》为网友玻璃渣子分享!如侵犯到您的合法权益请联系我们删除