温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

OC初步认识

发布时间:2020-06-24 22:04:07 来源:网络 阅读:629 作者:yjf123546 栏目:开发技术

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的返回值,因为其返回值为整型

 

     

 

 

 

 

 

 

 


向AI问一下细节
推荐阅读:
  1. 认识JSON
  2. Nginx初步优化

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI