OC初步认识
一 , 了解面向对象和面向过程的思想区别
1,面向过程编程(Procedureoriented Programming, POP ): 以事件为中心,关系完成该事件的详细步骤,一步一步实现
2, 面向对象编程(Object Oriented Programming, OPP);: 以事务为中心,也就是参与事件的参与者,设计事物的功能,而完成事件只是事物的所有功能中的一个小功能
二, 类 和 对象 是什么
类: 具有相同特征和相同行为的事物的抽象,类是一个抽象概念,在生活中不具体,并且,在OC里只有一个类没有根类,即NSObject,其他的类都有父类,根类
对象: 是类的实例,即类的具体表现,是具体的,生活中的万物都是对象
描述一个类: 通过特征(静态属性) 和行为 (动态属性,动作,功能)
三,具体类的定义要使用类的功能必须先定义类
定义类的分两部分:
1, 类的接口部分:提供外部访问接口,相当于使用说明书
1),类的接口部分写在.h文件里, 如定义一个名为Person的类打开”.h”文件里就有
@interface Student__1____ : NSObject
@end
定义:
(1),以@interface开头@end结束,只有把类的接口定义内容写在开始和结束之间才有效
(2),@interface后的Student__1____是类名
(3),类名后的":"冒号表示继承,表示该类是有父类
(4),:冒号后面的NSObject是父类名
2, 类的实现部分:相当于功能的实现
类的实现部分写在.m文件中
类的实现部分: 打开”.m”文件里就有
@implementation Student__1____
@end
(1),以@implementation 开头,以@end结束,实现内容必须写在中间才有效
(2),@implementation 后跟上Student__1____是要实现的类(需要指定要对哪一个类做实现)
类的实现其实就是实现该类的方法
四,具体类的使用以及它与C语言不同的表达方式
我们可以举个具体的例子更明确
写一个学生类;名字为Student__1____
以下均以学生类为例,不再声明
使用类
1,第一步
首先在”.h”文件里写类的接口部分(相当于C语言中函数的声明,这样想可以更容易理解)
1),先在大括号内定义实例变量
如: {
NSString *name;
NSString *sex;
NSInteger age;
}
其中实例变量必须写在大括号之内,而且只能写实例变量,对应描述一个类的特征,(定义实例变量,相当于C语言中结构体中的结构体成员)
2) 定义类的接口,即方法的声明,方法对应描述类的行为 (OC的类的接口相当于C语言中函数的声明)
在OC里,整型用NSInteger,且在OC里有字符串的类,所以定义一个字符串的变量有专门的关键字即NSString,NS是OC里语言的特点代表这是OC语言,另外就输出方法与C语言的格式化输出函数有所不同:
在C语言里输出用printf()函数 在OC里用NSLog(@)方法输出;括号的@不可少 @是OC语言的标志
此外在C语言里变量类型都用()小括号括起来
在以下出现的"+" 和"-"等到在main函数里调用时再解释
如:
(1),方法1,说自己的姓名,,性别,年龄
- (void)sayMyself;
方法名 sayMyself
(2),方法2,说自己的爱好
- (void)sayMyLove;
方法名 sayMyLove
(3),方法3,说自己的工资
- (NSInteger)saySalary:(NSInteger)money;
在OC里如果方法有参数,那么":"冒号也是方法名的一部分, 如果方法有多个参数,则需要加多 个":"并且在每个冒号前面加上变量名
如:该方法名为:saySalary:
自定义初始化方法
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
2,第二步
在”.m”文件写类的实现部分(相当于C语言里的函数的实现)
在OC里输出的数据类型为字符串类型则用格式化说明符”%@”,并不是”%s”,其他的一般类型格式化说明符不变
如下;
(1),方法1,说自己的姓名,性别,年龄
- (void)sayMyself
{
NSLog(@"name:%@,sex:%@,%ld",name,sex,(long)age);
}
(2),方法2,说自己的爱好
-(void)sayMyLove
{
NSLog(@"我喜欢敲代码??????");
}
(3),方法3,说自己的工资
-(NSInteger)saySalary:(NSInteger) money
{
return money;
}
3,第三步
OC中方法的调用采用消息发送机制即”[receiver message]”(中括号不能省略)(message)消息即方法, (receiver)消息的接收者 是类或者对象
在这里可以解释"+" 和"-"的作用: 区分消息给类还是对象发送消息用 "+" 和 "-" ,如果方法是一个"-"号方法,是给对象发送消息,如果是"+"号方法,则是给类发送消息
1),方法的调用需要创建对象
创建对象分为两步:
(1),开辟空间
通过[Student__1____ alloc] 在堆区开辟的空间才是真正的对象,只不过对于指针变量per存储着堆 区的首地址,通过它才能访问对象,所有我们把指针变量stu1叫做对象,(真正的对象还是对区空间, stu1本质上是一个指针变量)
(2), 初始化(赋初值) init方法完成初始化操作"-" 号方法,对象调用
但是通常创建对象把两步操作连起来写
如为学生类创建对象:
Student__1____ *stu1 [[[Student__1____ alloc] init]
在这里init是系统定义的初始化方法,如果是整型,则初始化为0,若为字符串,则初始化为nil(相当于C语言里的NULL);
我们通常可以自定义初始化
如:
1)在”.h”文件里写接口
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
“id”代表泛指类型,相当于C语言里的”void *” ,对于字符串的类型说明符,必须是NSString + *;因为它是指针类型
2)在”.m”文件里写初始化函数的实现
- (id)initStudentname:(NSString *)aName sex:(NSString *)aSex num:(NSString*)aNum major:(NSString *)aMajor age:(NSInteger)aAge;
{
name = aName;
sex = aSex;
num = aNum;
major = aMajor;
age = aAge;
return self;
}
在这里self作用是谁调用该方法,self就是谁
如: 开辟空间时直接子自定义初始化
Student__1____ *stu1 = [[Student__1____ alloc]initStudentname:@"YangJunfang" sex:@"girl"num:@"541110010148" major:@"math" age:22];
其中
言归正传,开辟空间后就可以调用方法了:
如下:
实现方法1,说自己的姓名,,性别,年龄
[stu1 sayMyself];
实现方法2, 说自己的爱好
[stu1 sayMyLove];
实现方法3,说自己的工资
NSInteger money = [stu1saySalary:10000];
输出工资
NSLog(@"money =%ld",money);
在这里需要定义一个整型的变量用来接收方法saySalary的返回值,因为其返回值为整型
原文:http://9178463.blog.51cto.com/9168463/1533996