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在编译的过程当中,编译器是会去检查方法是否有效的,如果无效会给你一个警告。但是编译器并不会阻止你执行,因为只有在执行的时候才会触发消息,编译器是无法预测到执行的时候会发生什么奇妙的事情的。
接上篇
6:继承:
·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值了。
[self setVar:10];
通常情况下特性的名字和变量的名字相同。
特性也不是万能的,它不支持接收额外参数的方法。
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。
联系客服