了解Objective-C特点及特征

移动开发 iOS
本文的目的是让我来了解Objective-C特点及特征,通过了解Objective-C特点,我们可以 更方便的去学习,来看内容。

了解Objective-C特点及特征是本文要介绍的内容,目前好象只有Apple使用Objective-C作为其支持的语言吧。 不多说,直接来看详细内容,与C++的不同之处有:

Objective-C中所有的类都必须继承自NSObject。

Objective-C中所有对象都是指针的形式。

Objective-C用self代替this。

Objective-C使用id代替void*。

Objective-C使用nil表示NULL

Objective-Ck只支持单继承。

Objective-C使用YES/NO表示TRUE/FALSE

Objective-C使用#import代替#include

Objective-C中用消息表示类的方法,并采用[aInstance method:argv]调用形式。

Objective-C支持反射机制

Objective-C支持Dynamic Typing, Dynamic Binding和Dynamic Loading。

与C++的相同之处有:

与C共享的部分一致。

可以使用assert(BOOL), 一般用NSCParameterAssert(BOOL)代替。

Objective-C中的命名前缀说明:

  1. NS-:NextStep   
  2. CF-:Core Foundation   
  3. CA-:Core Animation   
  4. CG-:Core Graphics   
  5. UI-:User Interface  

Objective-C中的消息特殊性:

调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类。

调用消息的类可以是nil。在C++中,在使用类方法之前,我们都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如if (var) { delete var; } 但是在Objective-C中,我们就可以直接写[var release]; 即使var == nil, 也不会有问题。

Objective-C中的函数声明格式有:

  1. -/+ (return type) function_name;   
  2. -/+ (return type) function_name : (parameter type) parameter;   
  3. -/+ (return type) function_name :   
  4. (parameter type) parameter1 otherParameter :   
  5. (parameter_type) parameter2  

以上参数说明:-表示一般函数,+表示静态函数。otherParameter是参数的别名(***个参数的别名省略),在函数调用时方便指定。

Objective-C中的构造/析构函数

Objective-C中的init()/release()对应于C++的构造/析构函数。alloc()/dealloc()也就对应于C++的new和delete,其中的dealloc()由于引用计数的自动调用而不用手动调用。

Objective-C中父类的init()/release()函数需要子类的手动调用。而且每次都必须调用。不同于C++的自动调用。

构造函数(- (id) init)调用形如:CSample* pSample=[CSample alloc] init];其中alloc(+ (id) alloc)是继承来的static函数,init是继承来的一般函数,如重写一般函数时,则相当于C++的覆盖(不带参数)或重载(带参数)。

析构函数(- (void) release)将引用计数减1,当=0时父类的release()会自动调用dealloc(- (void) dealloc);

当Objective-C没有数据成员时,可省略{},建议保留。

继承下来的方法,如:-(id) init可以头文件中省略,建议保留

0-C中只有数据成员的访问限制,没有方法的访问限制。

同C++一样,数据成员有三种访问限制public, protected, private,缺省是protected。

示例:

  1.  @interface AccessExample: NSObject {  
  2. @public  
  3.     int publicVar;  
  4. @protected  
  5.     int protectedVar;  
  6. @private  
  7.     int privateVar;  
  8. }  
  9. @end  

方法的访问限制可通过Category实现

示例:

  1. @interface MyClass  
  2. - (void) sayHello {  
  3.     NSLog(@"Hello");  
  4. }  
  5. @end  
  6.     
  7. @interface MyClass(Private)  
  8. - (void) kissGoodbye;  
  9. @end  

Objective-C中没有类的静态变量,只有全局变量

Objective-C中的数组NSArray可以保存不同类型的数据。

Objective-C也支持run-time时的类类型检查

  1. - (BOOL) isKindOfClass: classObj 

用于判断该对象是否属于某个类或者它的子类

  1. - (BOOL) isMemberOfClass: classObj 

用于判断该对象是否属于某个类(这里不包括子类)

  1. - (BOOL) respondsToSelector: selector 

用于判断该对象是否能响应某个消息。这里,我们可以将@selector后面带的参数理解为C++中的函数指针。

注意:

1)不要忘了@

2)@selector后面用的是(),而不是[]。

3)要在消息名称后面跟:,无论这个消息是否带参数。如:

  1. [pSquare respondsToSelector:@selector(Set: andHeight:)]。   
  2. + (BOOL) instancesRespondToSelector: selector 

用于判断该类是否能响应某个消息。这是一个静态函数

-(id) performSelector: selector :调用对象的selector方法。

conformsToProtocol 类似于respondsToSelector ,用于动态检查某个对象是否遵守某个协议。

Category:在没有源代码的情况下,为一个已经存在的类添加一些新的功能

只能添加新的方法,不能添加新的数据成员

Category 的名字必须是***的

Protocol:相当于C++中的纯虚类

形如:

  1. @interface MyDate: NSObject <Printing> { } @end  

使用:

  1. MyDate * dat = [[MyDate alloc] init]; id<Printing> var = dat; [var print]。  

说明:我们首先声明了Printing 协议,任何遵守这个协议的类,都必须实现print 方法。在Objective-C 中,我们通过<>来表示遵守某个协议。当某个类声明要遵守某个协议之后,它就必须在.m文件中实现这个协议中的所有方法。使用id<Printing> 作为类型,而不是象C++中的Printing* var。

IBOutlet, IBAction: 这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。

尽量避免在一行语句中进行两层以上的嵌套

消息转发:

  1. - (void) forwardInvocation: (NSInvocation*)anInvocation;  

小结:了解Objective-C特点及特征的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-07-22 15:10:51

Objective-C 文件

2011-08-01 11:37:41

iPhone Objective- 内存

2011-08-02 15:55:31

Objective-C NSAutorele

2011-08-04 13:55:10

Cocoa Objective- 文件

2011-08-10 18:07:29

Objective-C反射

2013-03-27 12:54:00

iOS开发Objective-C

2011-05-11 11:20:26

Objective-C

2011-05-11 15:58:34

Objective-C

2013-06-20 10:40:32

Objective-C实现截图

2011-07-26 10:50:50

Objective-C Selector

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-05-11 13:54:08

Objective-C

2011-05-11 15:45:50

内存管理Objective-C

2011-08-02 13:16:36

Objective-C 语法 函数

2011-08-04 11:15:46

Objective-C 构造函数 构造方法

2011-05-11 14:06:49

Objective-C

2013-08-21 14:57:42

objective-c问题

2014-04-30 10:16:04

Objective-CiOS语法

2011-08-04 09:35:09

Objective-C 编码规范

2011-07-29 16:16:30

Objective-c block
点赞
收藏

51CTO技术栈公众号