想和“苹果”打交道,Object-C还是必不可少的。这里整理了Object-C的主要特性,如果有编程基础的话还是可以很快了解Object-C的。
1:概述:Object-C其实就是对C的扩展,并拥有了一些新的特性,因此我们要有C的基础。苹果公司为Object-C提供了Cocoa框架,方便我们在苹果设备上开发。 2:文件类型:与C不同的是,主文件扩展名为.m,头文件同样为.h。其中头文件用来包含元素声明,函数原型等。C使用#include来包含一个头文件,Object-C同样可以使用,但我们引入了#import,其可以保证头文件只包含一次。 3:Hello World程序: #import <Foundaion/Foundation.h> int main(int argc,const char *argv[]){ NSLog(@"hello world"); return (0); } NSLog函数相当于C中的printf函数,我们仍然可以使用printf,但NSLog加入了一些新的内容,如时间戳,换行符等。‘NS’前缀表示这个函数来自于NEXTSTEP的Cocoa框架。 4:字符串: Object-C的字符串与C的字符串不同,是用Unicode编码来代替了ASCII编码。由于Object-C完全兼容C,为了区分,字符串前面用@。 NSString 方法mutableCopy返回NSMutableString 5:类: ·1:类的声明:声明开始使用@interface,结束定义使用@end;而不是使用class @interface Shape : NSObject { int var; @public Int color; } -(void) setColor : (int ) color; +(void)showMe; @end 花括号内是数据成员,在Object-C里我们叫:instance variables(实体变量iVars)。 与其他的语言一样,Objective-C也支持public,private还有protected作用域限定, 缺省就是protected ·2:类中方法的定义: 减号“-”声明的方法为:实体方法(instance method) 类方法可以创建对象,但创建之后要调用autorelease,因为一旦退出这个方法,我们将无法再控制生成的变量。 返回值类型用()包住,也可不声明返回值,编译器会自动添加一个id类型的返 回值。因此不推荐不写返回值,如果没有直接写(void) - ·3:类的实现:使用命令:@implementation。 @implementation Shape -(void) setColor : (int ) color { //code } +(void)showMe { //code } @end ·4:类的实例化:创建一个类包含了空间的开辟,成员的初始化。 Object-C中使用id来表示一个对象,实际就是指向对象的指针,但如果明确类型时,应避免使用id,因为不容易看出对象的类型。 4 9 10 11 12 13 [Cattle [对象名字 -(id)init { If(self = [super init]){ } Return self; } if } else{ } ·5:调用方法:Objective-C里面的方法的使用和其他语言有些不同,Objective-C使用消息(Message)来调用方法。所谓的消息就是一个类或者对象可以执行的动作。消息的格式如下: [对象或者类名字 方法名字:参数序列]; 其中“对象或者类名字”被称作消息的接收器(Receiver),),“方法名字”被称作选择器(Selector)或者关键字(Keyword)。方法名字:参数序列”被称为一个消息(Message),Objective-C在编译的过程当中,编译器是会去检查方法是否有效的,如果无效会给你一个警告。但是编译器并不会阻止你执行,因为只有在执行的时候才会触发消息,编译器是无法预测到执行的时候会发生什么奇妙的事情的。 接上篇 ·1:声明类时后面的冒号即表示要继承的类。 @interface Shape : NSObject Object-C和java一样仅支持单根继承。 self关键字相当于this,用来访问当前类里的变量或方法。 super关键字同super,用来调用父类 Bull 6:重新编译问题: 由于头文件的相互包含及依赖关系,往往很小的改动就需要重新编译很多的文件。Object-C提供了一种方法可以减少由于依赖引起的重新编译:@class 来告诉编译器这是一个类,编译器只需要通过指针来引用它即可,并不需要知道关于这个类的更多信息。以此来减少编译工作。 使用时,我们可以替换掉#import Tire.h: @class Tire; @class Engine; @interface Car : NSObject { Tire *tires[4]; Engine *engine; } 这样在编译的时候,编译器便会知道Tire和Engine都是类,但不知道其它信息,因此如果要调用Tire和Engine的方法时将不可以。 7:特性property 之前的setter和getter方法的书写也许会比较繁琐,Object-C引入了特性(Property)的概念。用来让编译器自动创建setter和getter方法。 @interface Shape : NSObject { int var; } //也可设定权限@property(readonly) 在.m文件中声明: 设置之后便可以通过 setVar和var方法设置和返回var值了。 通常情况下特性的名字和变量的名字相同。 特性也不是万能的,它不支持接收额外参数的方法。 8:类别category: - 9:协议:protocol;类似于java中接口; @end 10:BOOL类型 相当于C中的bool类型(true,false),Object-C提供了BOOL(YES,NO)。 其实BOOL类型为singed char,YES和NO是宏定义的1和0;注意,对于非0的整数同样认为是真,因此我们不要简单的和YES比较。或者应该统一成YES。 |
|