您的位置:首页 > 移动开发 > Objective-C

OC基础-零基础学习Objective-C:第一部分.类和对象

2015-08-28 21:45 465 查看
本人也是Objective-C的小白,以下只是记录我学习过程的历程,如有不对的地方或者疑问欢迎指正。

原发表在新浪微博上,现转移到这里

必备工具:

1.一本书,建议《Objective-C基础教程》,现在出到第二版了。

2.一个装有Mac OS操作系统的电脑,如果有能力当然是iMac或者Macbook,如果没有经济能力并且你相信你自己的windows电脑的配置够高,那么你可以在你的windows电脑上面装一个虚拟机,然后在虚拟机上运行Mac OS操作系统。

3.有了笔记本就需要Objective-C的开发工具——Xcode。

4.视频,网络上有很多OC基础教程视频,可以下下来看。

5.笔记本,笔,用来记录你认为不易懂的东西,方便以后查阅。

6.后期,唔,我还没到后期,目前为止只是为了IOS开发买了一本书,《精通IOS开发》,水果书系列的。

好啦,准备完毕。

开始啦!

Objective-C(以下简称OC)是一个面向对象的编程语言,OC的主要部分就是对象,创建对象首先需要创建一个对象所在的类。
所谓类和对象,就像是人类和个人的关系,任何一个人都属于人类的范畴,都是由DNA编码成的,都具有人类共有的属性,比如说耳朵、眼睛、鼻子、身高、体重、皮肤、细胞等等(太多了说不完),这里人类就相当于OC语言中的“类”,而任何一个人就相当于OC语言中类下的一个对象。
类是一个统称,类里面还包含了这些东西:
类的名字——就像“人类”一样,你需要一个名字与其他的类区分开。
类的属性——作为一个“人类”,是有着不同的属性的,上面说的耳朵眼睛神马的都属于属性的范围
类的实现——这里“实现”的定义是指类的实现的声明,就是告诉别人,作为“人类”大家都可以做的事情
而对象,则是从类的这些东西里面全部拿过来放在自己身上,就组成了一个属于这个类的对象。
OC语言中,创建类需要以下几个步骤:

1.类的声明

声明类的名字,继承

声明类具有的属性(成员变量)

声明类的实现(方法)

2.类的实现

编写类的实现(方法)的代码

3.类的调用

我用代码来说明:

#import

//这个和C语言有些类似,头文件声明,这里用 #import ,苹果官方建议使用 #import ,官方文档也是用的这个,用这个的好处是可以避免重复声明。

//Foundation,是OC下的一个开发框架,OC下的开发框架有很多,暂时我们只用到这一个。

//Foundation.h,是头文件,代表了可以调用Foundation框架下的所有内容。调用系统的 .h 文件是用尖括号 <> ,调用自己编写的 .h 文件使用双引号 "" 。

@interface 类名 : 父类名

//interface,是类的声明接口,后面接类名,再加冒号,冒号后面为继承的父类名,继承这里后面才会涉及,现在只知道,新的类,默认继承NSObject这个类,好用来实现类的方法的调用。

{ //声明类的属性(成员变量),类的属性(成员变量)的类型可以是任意类型,甚至可以是个类。类的属性(成员变量)声明职能放在interface下的大括号 {} 内。

属性类型 属性名称1;

属性类型 属性名称2;

属性类型 属性名称3;

......

}

//类的实现(方法)的声明,这里只声明,不写具体的语法。方法前面必有减号 - ,具体原因愿意了解可以参考《Objective-C基础教程》这本书。

- (返回值类型)方法名称:(参数类型)参数1 :(参数类型)参数2......;

- (返回值类型)方法名称:(参数类型)参数1 :(参数类型)参数2......;

......

@end

//@end是结束类的声明的标志符,必须有。

@implementation 类名

//implementation,是类的实现(方法),后面接前面已经声明过的类名。

- (返回值类型)方法名称:(参数类型)参数1 :(参数类型)参数2......

{

类的实现(方法)的代码;

}

- (返回值类型)方法名称:(参数类型)参数1 :(参数类型)参数2......

{

类的实现(方法)的代码;

}

......

@end

int main()

//主函数,和C语言一样

{

类名 *a = [类名 new];

//中括号 [] 是OC中特有的,[] 代表着方法的调用,所有方法的调用都必须放在中括号 [] 里面:[调用方法的对象 方法名称];

//new在这里是继承过NSObject类得来的方法,创建新对象的方法。

//[类名 new] 的意思就是以一个类为模版创建一个属于这个类的新对象。

//类名 *a 的意思是创建一个类的类型的指针,然后将后面新创建的这个类的对象的地址赋给这个指针。

a->属性名称 = 1;

//这个是利用指针对对象的属性进行初始化赋值,如果不进行赋值,所有属性值默认为0。

[a 方法名称];

//利用指针调用对象的方法。

return 0;

//返回0,释放内存。

}

下面是一个人的实例。

#import

typedef struct

{ //定义Date结构体。

int year;

int month;

int days;

}Date;

typedef enum

{ //定义Sex结构体。

SexMan,

SexWoman

}Sex;

@interface Car : NSObject//继承NSObject类。

{ //声明Car类的成员变量。

@public//@public 指的是允许外部指针调用对象的成员变量。

int far;//行驶距离(km)

}

- (void)run:(int)far1;//开车,int类型的参数far1 代表我想让车开出去多远。

@end

@interface Person : NSObject

{ //声明Person类的成员变量。

@public

char *name;//姓名

double weight;//体重(kg)

double height;//身高(cm)

Date bir;//生日

Sex sex;//性别

Car *car;//车子,Car类 类型的成员变量。

}

- (void)drive:(int)far1;//开车,int类型的参数far1 代表我想让车开出去多远。

- (void)print;//输出个人信息。

@end

@implementation Car

//定义Car类方法的实现代码。

- (void)run:(int)far1

{

far = far + far1;//调用参数相加。

NSLog(@"开车一共开了%dkm",far);

//NSLog为输出函数,效果等同于C语言中的printf,为OC的专用,以后会学的。默认结尾自动换行。

}

@end

@implementation Person

//定义Person类方法的实现代码。

- (void)print

{

NSLog(@"%s,性别:%d,体重:%f,身高:%f,生日:%d-%d-%d",name,sex,weight,height,bir.year,bir.month,bir.days);

}

- (void)drive:(int)far1

{

[car run:far1];//在方法中调用自己成员变量对象的方法。

}

@end

int main()

{ //新建一个Person类的对象传地址给p。

Person *p = [Person new];

//下面赋值给p的成员变量。

p->name = "Jack";

p->weight = 60;

p->height = 180;

//Date的结构体赋值最好先复制给一个Date类型的参数,这样方便以后调用。

Date d = {1994,9,10};

p->bir = d;

p->sex = 0;

//新建一个Car类的对象c,并且把这个对象c赋值给对象p的成员变量car。

Car *c = [Car new];

c->far = 120;

p->car = c;

[p print];//调用p的print方法。

[p drive:20];//调用p的drive方法,并且传参给drive方法。

return 0;

}

@end

总结一下,对于类和对象首先要明白的就是两个东西之间的关系,然后牢记创建类的步骤——声明、方法、创建对象、调用方法。还要注意的是一个类的声明 @interface 一定要写在这个类的方法 @implementation 之前,至于把 @implementation 放在哪里是都可以的。

P.S. 对于类和对象的内存,唔,不好讲,等我有时间了上图再说
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: