热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS学习10之OC类和对象

本次是OC的第一节课,主要是学习和理解类与对象1、面向对象1OOP(ObjectOrientedProgramming)面向对象编程。面向对象以事物为中心ÿ

本次是OC的第一节课,主要是学习和理解类与对象

1、面向对象

 1> OOP(Object Oriented Programming)面向对象编程。

 面向对象事物为中心,完成某件事情都需要哪些事物来参与,参与该事件的事物都有哪些功能,完成该事件需要这些事物相互协作共同完成,并且完成该事件只是所有事物功能中其中的⼀个⼩功能

 2> 面向对象与面向过程的区别

 3> 面向对象优点

  面向对象具有良好的可扩展性重用性

  面向对象可以降低我们代码的耦合度,提高代码的可移植性

  面向对象接近于日常生活和自然的思考方式,可以提高我们软件开发的效率质量

 4> 面向对象编程

  面向对象编程的核心是转变考虑问题的方式。当我们看到一个问题的时候,我们不需要再考虑完成该事件需要怎样的步骤,而是考虑完成该事件都需要哪些对象(事物)参与,每一种事物都有哪些特征行为。完成相应的事件需要不同的事物根据自身行为,协调完成该事件。

2、OC概述

 1> OC语言的特点

  C语言的超集,允许在OC中使用C语言代码,编译器兼容C语言程序

  具备完善的面向对象特性:封装继承多态

  包含一个运行时系统。

  类库丰富。

 2>OC与Swift

  Objective-CSwift虽然语法差异很大,但是背后的思想以及所依托的类库都是相同的。

3、类和对象的概念和区别

 1> 类:具有相同特征和行为的事物的抽象

 2> 对象:类的实例,万事万物皆是对象

4、类和对象的定义

 1> 类的定义

  面向对象的核心思想是类和对象

  OC中类的定义分为两个部分:接口部分实现部分

  接口部分:对外声明类的特征行为。(.h文件中)

  实现部分:行为的具体实现。(.m文件)

 2> 接口部分

1 #import
2
3 @interface Person : NSObject
4 {
5 // 声明实例变量
6 NSString *_name; // 姓名
7 int _age; // 年龄
8 NSString *_sex; // 性别
9 double _height; // 身高
10 NSString *_hobby; // 爱好
11 }
12
13 // 吃饭
14 - (void)eat;
15
16 // 睡觉
17 - (void)sleep;
18
19 // 学习
20 + (void)study;
21
22 @end

   @interface@end成对出现,表示类的接口部分(声明部分)

  用来声明类的实例变量(特征)和方法(行为)

  Person表示类名

  : 表示继承关系 : 后面的类名表示父类名

  NSObject 基类

  ① 实例变量

   代码5-10行,声明实例变量必须在大括号{...}中

   OC中的类型,声明实例变量的时候后面加 *

   C语言中的基本数据类型,类型后面不加 *

   实例变量的命名规则:以下划线 '_' 开头(书写规范), 首字母小写,遵循驼峰命名法

  ② 定义方法

   OC中的方法分为两类

    第一种:'+' 号方法(类方法),由类名调用

    第二种:'-' 号方法(对象方法实例方法),由对象调用

 3> 实现部分

1 #import "Person.h"
2
3 @implementation Person
4
5 // 吃饭
6 - (void)eat {
7 NSLog(@"");
8 }
9
10 // 睡觉
11 - (void)sleep {
12 NSLog(@"");
13 }
14
15 // 学习
16 + (void)study {
17 NSLog(@"好好学习,天天向上");
18 }
19 @end

  @implementatiom@end成对出现,类的实现部分  

  实现Person类中定义的方法

  Person 表示类名

 4> 对象的创建

  是一个抽象的概念,在实际开发中程序的运行时通过对象间相互协作来完成

  对象实例,通过创建对象

1 int main(int argc, const char * argv[]) {
2 @autoreleasepool {
3 // 第一种
4 // 申请存储空间
5 Person *p1 = [Person alloc];
6 // 初始化p1对象
7 p1 = [p1 init];
8
9 // 第二种(常用)
10 // 消息嵌套机制
11 Person *p2 = [[Person alloc] init]; // alloc 申请存储空间,init 初始化对象
12
13 // 第三种
14 // new 等同于 alloc 和 init
15 Person *p3 = [Person new];
16
17 // OC中使用 [] 给方法发送消息
18 [p2 eat]; // 使用对象名调用对象方法
19 [p2 sleep];
20 [Person study]; // 使用类名调用类方法
21 }
22 return 0;
23 }

  创建对象

    定义类

    开辟存储空间

    初始化

  上面的代码中有三种方式,一般在工程中使用第二种

  开辟空间

   + (instancetype)alloc;

   '+' 表示方法是类方法,只能由类调用。instancetype返回值类型,可以用id(任意对象类型)替代

  初始化

   - (instancetype)init;

   '-' 表示对象方法,对象调用。instancetype返回值类型,可以用id(任意对象类型)替代

 5> 区别id和instancetype

  ① idinstancetype都可以作为方法返回值类型,都表示任意类型对象

  ② instancetype可以返回和方法所在类相同对象,id只能返回未知的类型

      ③ instancetype只能作为方法的返回值参数类型,id不仅可以作为返回值类型,可以用来作为定义变量的类型

      ④ 在init方法中,idinstancetype作为返回值类型是没有区别

5、实例变量的可见度

 实例变量可见度分别是:@public,@protected,@private,@package 

  @public 修饰的变量 在任何地方都可以直接访问对象的成员变量

  @private修饰的变量 只能在当前对象方法直接访问

  @protected修饰的变量 在当前子类方法中直接访问

  @package修饰的变量 只要处于同一个框架中就能直接访问对象的成员变量

 外界想要访问对象实例变量,实例变量需要通过@public修饰。

 在 .h 文件中实例变量没有指定可见度的情况下,默认@protected

 .m 文件中实例变量也可以被定义,可见度是 @private

 三种可见度的区别

5、方法

 1> 方法分类

 方法分为对象方法类方法

  对象方法 以减号 - 开头, 只能由对象调用,对象方法中能访问成员变量(实例变量)

  类方法加号 + 开头, 只能由类(名)来调用, 类方法中不能访问成员变量(实例变量)

 2> 方法名

1 // _isMarried的getter方法
2 // 方法名:isMarried
3 - (BOOL)isMarried;
4 // _isMarried的setter方法
5 // 一个参数方法名setIsMArried:
6 - (void)setIsMarried:(BOOL)isMarried;
7 // 多个参数方法名:setHoddy: weight: address: isMarried:
8 - (void)setHoddy:(NSString *)hoddy
9 weight:(double)weight
10 address:(NSString *)address
11 isMarried:(BOOL)isMarried;

方法名的确定请参考以上代码

6、setter和getter方法

 实例变量如果是受保护类型的,外界无法直接访问,外界如果要访问实例变量,需要本类提供方法,外界访问的话直接调用相应的方法即可  

 1> 外界操作实例变量通常对实例变量赋值取值操作

  setter方法:本类提供的用来给实例变量赋值的方法

  getter方法:本类提供的用来给实例变量取值的方法

 2> 方法命名

  setter方法:以set开头,后面跟上实例变量名(没有下划线)

  getter方法:实例变量名去掉下划线 _

以下是一个较完整的类定义的代码

Goddess.h

1 #import
2
3 @interface Goddess : NSObject
4 {
5 // 声明实例变量
6
7 // 实例变量没有指定可见度的情况下,默认是@protected
8 NSString *_speciality; // 特长
9
10 @public // 公共的
11 NSString *_name;// 姓名
12 int _age; // 年龄
13
14 @protected // 受保护的 外界无法访问,可以被子类继承
15 NSString *_hoddy; // 爱好
16 double _weight; // 体重
17
18 @private // 私有的 外界无法访问,不可以被子类继承
19 NSString *_address; // 地址
20 BOOL _isMarried; // 是否已婚
21 }
22 // _hoddy的setter方法
23 - (void)setHoddy:(NSString *)hoddy;
24
25 // _hoddy的getter方法
26 - (NSString *)hoddy;
27
28 // _weight的setter方法
29 - (void)setWeight:(double)weight;
30
31 // _weight的getter方法
32 - (double)weight;
33
34 // _address的setter方法
35 - (void)setAddress:(NSString *)address;
36
37 // _address的getter方法
38 - (NSString *)address;
39
40 // _isMarried的setter方法
41 - (void)setIsMarried:(BOOL)isMarried;
42
43 // _isMarried的getter方法
44 - (BOOL)isMarried;
45
46 // 定义多参的方法
47 // 方法名:setHoddy: weight: address: isMarried:
48 - (void)setHoddy:(NSString *)hoddy
49 weight:(double)weight
50 address:(NSString *)address
51 isMarried:(BOOL)isMarried;
52
53 @end

Goddess.m

1 #import "Goddess.h"
2
3 @implementation Goddess
4
5 // _hoddy的setter方法
6 - (void)setHoddy:(NSString *)hoddy {
7 _hoddy = hoddy;
8 }
9
10 // _hoddy的getter方法
11 - (NSString *)hoddy {
12 return _hoddy;
13 }
14
15 // _weight的setter方法
16 - (void)setWeight:(double)weight {
17 _weight = weight;
18 }
19
20 // _weight的getter方法
21 - (double)weight {
22 return _weight;
23 }
24
25 // _address的setter方法
26 - (void)setAddress:(NSString *)address {
27 _address = address;
28 }
29
30 // _address的getter方法
31 - (NSString *)address {
32 return _address;
33 }
34
35 // _isMarried的setter方法
36 - (void)setIsMarried:(BOOL)isMarried {
37 _isMarried = isMarried;
38 }
39
40 // _isMarried的getter方法
41 - (BOOL)isMarried {
42 return _isMarried;
43 }
44
45 // 定义一个多参的方法
46 - (void)setHoddy:(NSString *)hoddy
47 weight:(double)weight
48 address:(NSString *)address
49 isMarried:(BOOL)isMarried {
50
51 _hoddy = hoddy;
52 _weight = weight;
53 _address = address;
54 _isMarried = isMarried;
55 }
56
57 @end

 

转:https://www.cnblogs.com/gfxxbk/p/5290834.html



推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
author-avatar
白羊黔中草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有