#import <Foundation/Foundation.h>
//1.类的声明:例如Car类
//声明对象的属性和行为
@interface Car :NSObject//继承NSObject 使Car类实现具有创建对象的能力
{//成员变量默认初始化为0
@public //@public 后面的成员变量可以被外部指针间接的访问
int wheels; //轮子个数
int speed; //时速
}
//方法的声明只能写在interface代码块中,并且写在声明成员变量的大括号外面
// 方法(行为):方法名、参数、返回值(声明、实现)
// 只要是OC对象的方法,必须以减号 - 开头
// OC方法中任何数据类型都必须用小括号()扩住
// OC方法中的小括号():括住数据类型
- (void) run;
@end
//2.类的实现 只用来实现方法
@implementation Car
- (void) run
{
//方法的具体实现
NSLog(@"车子跑起来啦");
}
@end
int main()
{
// 在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称]
// 利用类来创建对象
// 执行了Car这个类的new行为来创建新对象
Car *p; //定义一个Car类型的指针变量p,只能够指向Car类型的对象
p=[Car new];//创建一个Car类的对象,并且返回对象本身地址给了p指针。
//以上也可以合并成一句Car *p=[Car new];
p->wheels=5; //需要在定义成员变量的前面加上@public才能够访问。
p->speed=120;
[p run]; //向指针变量p所指向的Car的对象发一条run的指令或者说消息
NSLog(@"%p",p);
NSLog(@"这辆车有%d个轮子,时速是%dkm/h",p->wheels,p->speed);
return 0;
}
objective-c相对于C语言:
1.源文件 后缀为m或者mm
完全兼容C语言的语法,也就是C语言可以直接写在m或者mm的文件中编译。
2.目标文件,编译后的目标文件都是.o文件
3.链接后产生的可执行文件默认都是a.out
4.屏幕输出语句:
C语言:printf 需要#include <stdio.h>
OC语言:NSLog 需要#import <Foundation/Foundation.h>
Foundation是一个框架,所以如果OC代码中有包含了这个框架,则编译的时候加上-framework Foundation。
NSLog接收OC字符串,格式@"字符串"。NSLog在输出完毕后会自动换行,而printf不会。
其中#import相当于C语言当中的#include,但是#import可以防止文件内容被多次拷贝。
5.OC相对于C多了一个BOOL类型
BOOL两种取值:
YES NO 都是大写 ,也可以当整数,YES 为1 ,NO 为0
BOOL的本质是signed char:typedef signed char BOOL
/*
设计人类
类名:Person
属性:体重 年龄
行为: 走路
*/
/*
1.类的声明
{
声明成员变量
}
声明方法
*/
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public
int age;
double weight;
}
- (void)run;
@end
/*
2.类的实现,方法的实现
*/
@implementation Person
- (void)run
{
NSLog(@"%d岁的人走路",age);
}
@end
/*
3.创建对象
*/
int main()
{
Person *p=[Person new];
p->age=20;
p->weight=70;
[p run];
return 0;
}
/*
对象中的成员变量是每个对象独占一份的。
方法是多个对象共有的。
每个对象默认都有一个指向该对象所属类的指针isa。
当程序法一条消息给某个对象,让它执行某个功能的时候,这个对象会根据isa指针指向的类中去
查找是否有这个方法,并且执行。
*/