OC的基本概念和类

  • 1. 基本概念
    • 1.1 OC和C程序的区别
    • 1.2 #import指令.
    • 1.3 框架
    • 1.4 自动释放池
    • 1.5 NSLog函数。
    • 1.6 字符串
    • 1.7 @符号
    • 1.8 函数与注释
  • 2. OC中的数据类型
    • 2.1 OC中支持C语言中的所有的数据类型.
    • 2.2 新增类型
      • 2.2.1 BOOL类型.
      • 2.2.2 Boolean
      • 2.2.3 class类
      • 2.2.4 id类型万能指针
      • 2.2.5 nil值
      • 2.2.6 SEL方法选择器
      • 2.2.7 block代码段
  • 3. 关于类的语法
    • 3.1 类的属性(变量)
    • 3.2 类的方法
    • 3.3 对象在内存中的存储
    • 3.4 关于类的补充知识
    • 3.5 多文件开发

1. 基本概念

1.1 OC和C程序的区别

  1. OC相对于C
    a.在C的击基础之上新增了一小部分面向对象的语法。
    b.将C的复杂的、繁琐的语法封装的更为简单.
    c. OC完全兼容C语言。

  2. OC程序的源文件的后缀名是.m。m代表message,代表OC中最重要的1个机制﹑消息机制。
    C程序的源文件的后缀名.c

  3. main函数仍然是OC程序的入口和出口.
    int类型的返回值代表程序的结束状态.
    main函数的参数:仍然可以接收用户在运行程序的时候传递数据给程序。参数也可以不要。

1.2 #import指令.

1)以#号开头,是1个预处理指令.

2)作用:是#inlcude指令的增强版。将文件的内容在预编译的时候拷贝写指令的地方

3).增强:同1个文件无论#import多少次,只会包含1次.
如果#include指令要实现这个效果就必须要配合条件编译指令来实现。而#import指令只需要直接包含就可以其他什么都不用做.

4).简要原理:#import指令在包含文件的时候,底层会先判断这个文件是否被包含。如果被包含就会略过,否则才会包含.

1.3 框架

1). 是一个功能集。

苹果或者第三方事先将一些程序在开发程序的时候经常要用到的功能事先写好.把这些功能封装在一个一个的类或者函数之中。这些函数和类的集合就叫做框架.有点像C语言的函数库.

2). Foundation框架.

Foundation框架中提供了一些最基础的功能:输入和输出,一些数据类型。

Foundation.h这个文件中包含了Foundation框架中的其他的所有的头文件。所以,我们只要包含Foundation.h就相当于包含了Foundation框架中所有的头文件。那么Foundation框架中的所有的函数和类就可以直接使用。

1.4 自动释放池

@autoreleasepool是自动释放池。
你可以将代码写在自动释放池之中或者干脆把这个自动释放池删除不会有任何影响。
即:

1.5 NSLog函数。

1).作用:是printf函数的增强版,向控制台输出信息.

2).语法:
NSLog(@“格式控制字符串”,变量列表);最简单的语法:
NSLog(@“要输出的信息”);

3).增强:
a.输出一些调试相关信息。
b.会自动换行.在输出完信息之后会自动换行.
c.OC中新增了一些数据类型。NSLog函数不仅仅可以输出C数据类型变量的值还可以输出OC新增的数据类型的变的值。而printf不能输出这些数据类型

1.6 字符串

1). OC中设计了1个更为好用的用来存储字符串的1个类型。NSString
NSString类型的指针变量专门用来存储OC字符串的地址。

2). OC的字符串常量必须要使用1个前缀@符号.
"jack”这是1个C语言的字符串.
@"jack”这是1个OC的字符串
NSString类型的指针变量,只能存储OC字符串的地址。即:NSString *str = @“jack”;

需要注意两点:

1). NSLog函数的第1个参数是1个OC字符串,所以NSLog函数的第1个实参应该以@符号开头.

2).如果要使用NSLog函数输出OC字符串的值,那么使用占位符%@

1.7 @符号

@符号的作用主要有两点:
1). 将C字符串转换为OC字符串。“jack” @“jack”
2). OC中的绝大部分的关键字都是以@符号开头.

1.8 函数与注释

函数与注释的用法与C语言完全相同

2. OC中的数据类型

2.1 OC中支持C语言中的所有的数据类型.

a. 基本数据类型
int double float char

b. 构造类型
数组结构体枚举

c. 指针类型
int *p1;

d. 空类型
void

e. typedef自定义类型.

2.2 新增类型

2.2.1 BOOL类型.

1). 可以存储YES或者NO中的任意1个数据.
2). 一般情况下BOOL类型的变量用来存储条件表达式的结果,如果条件表达式成立那么结果就是YES。如果条件表达式不成立结果过就是NO
3).BOOL的本质。
typedef signed char BOOL;
实际上BOOL类型的变量是1个有符号的char变量.
#define YES ( (BOOL)1)
#define NO( (BOOL)0)
YES实际上就是1
NO实际上就是0

2.2.2 Boolean

a.Boolean类型的变量可以存储true或者flase
b.一般情况下Boolean类型的变量用来存储条件表达式的结果.如果条件表达式成立那么结果就是true如果条件表达式不成立结果过就是false
c.本质
typedef unsigned char
Boolean;
#define true 1
#define false 0

2.2.3 class类

这个和C++的用法类似,第三节会详细将如何创建类,如果进行类方法的声明和实现,

2.2.4 id类型万能指针

这个后续再讲

2.2.5 nil值

nil 与NULL差不多

2.2.6 SEL方法选择器

这个后续再讲

2.2.7 block代码段

这个后续再讲

3. 关于类的语法

3.1 类的属性(变量)

  1. 位置。直接写在源文件之中不要写在main函数之中.

  2. 类的定义分为两个部分。
    1). 类的声明
    @interface 类名 : NSObject
    {
    这类事物具有的共同的特征.将他们定义为变量.
    }
    方法的声明
    @end
    2). 类的实现
    @implementation 类名
    将方法的实现写在这里.
    @end

  3. 创建一个类的对象

  4. 使用对象

3.2 类的方法

1.方法声明实现的位置

2.无参数的方法的声明、实现与调用

如:

3.带一个参数的方法的声明、实现与调用

4.带多个参数的方法的声明、实现与调用

为了方法的可读性而改变方法的名字,在冒号前增加“and参数X”。也可以没有,但是增加就是为了可读性

3.3 对象在内存中的存储



举例来说,如果有以下语句:

那么其在内存中存储的示意图表示如下:

3.4 关于类的补充知识

1.对于一个多个指针指向同一个对象的情况,这和c++是一致的,具体注意事项为以下两个:

2.分组导航标记,只是为了能够快速定位,方便程序员找到类的声明和实现

3.函数和类的方法的区别
函数的声明和实现与C语言(或者C++)是一样的,但是类的方法的声明每次都需要在返回值类型前面加上"-"号。

函数可以和方法一样写到类里面,但是不建议这样写,最好写到类外面。

4.关于类在使用过程中的易错知识点

5.如何理解:对象作为方法的参数?
本质上就是类可以看做一个数据类型,对象可以看做一个具体的变量。而在传对象的时候都是传指针,也就是地址。

6.如何理解:对象作为方法的返回值?

6.如何理解:其他类的对象作为另一个类的属性?

属性的本质是变量.而对象就是其他“类”(可以理解为数据类型)的一个变量。

在创建对象的时候,对象中的属性是按照类模板中的规定一个一个地创建出来的.类模板中属性是什么类型.那么对象中的属性就是什么类型.

如果对象的属性是另外1个类的对象,这个属性仅仅是1个指针变量而已,并没有对象产生。这个时候还要为这个属性赋值1个对象的地址才可以正常使用。

3.5 多文件开发

如果存在很多类,那么最好将他们放在另外一个文件中,不要全放在main.m文件中。

参考B站视频:Objective-C学习

Objective-C学习笔记(1)——OC的基本概念和类相关推荐

  1. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  2. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  3. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

  4. 《自控》学习笔记一——自动控制的一般概念(一)

    <自控>学习笔记一--自动控制的一般概念(一) 引言 自动控制理论发展简史 自动控制概念 基本控制方式 开环控制 闭环控制 复合控制 控制系统示例 负反馈原理 控制系统的组成 控制系统组成 ...

  5. 【学习笔记】 科目一之概念篇

    [学习笔记] 科目一之概念篇 概念题方法 1)抓重点:科目一设计知识范围太广,不要妄想所有知识点都复习到,这是不可能的,我们的目标是45分几个而不是考高分,复习时间有限,所以要学会抓重点,比如法律条文 ...

  6. SDN软件定义网络 学习笔记(1)--基本概念

    SDN软件定义网络 学习笔记(1)--基本概念 1. 定义 2. 提出背景 3. 体系结构 1. 定义 软件定义网络(Software Defined Network,SDN),顾名思义,SDN 与传 ...

  7. 操作系统学习笔记-2.1.5线程概念和多线程模型

    操作系统学习笔记-2019 王道考研 操作系统-2.1.5线程概念和多线程模型 文章目录 5线程概念和多线程模型 5.1知识概览 5.2 什么是线程?为什么要引入线程? 5.3引入线程及之后,有什么变 ...

  8. 操作系统学习笔记-01-操作系统的概念(定义),功能和目标

    操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念(定义),功能和目标 文章目录 1-操作系统的概念(定义),功能和目标 1.1常见的操作系统 1.2概念(定义) 1.3-操作系统的 ...

  9. python创建实例属性_Python学习笔记__6.5章 实例属性和类属性

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 1.1.实例绑定属性 class Student(object): def __init__(self, name): self.name ...

  10. FTDI FT2232H USB TO JTAG学习笔记(一)基础概念

    文章目录 一.FT2232H 和 JTAG 简介 1.1 FT2232H 1.2 JTAG 二.MPSSE 配置 2.1 MPSSE简介 2.2 串行协议配置 参考文献 注:转载请注明出处 记录下学习 ...

最新文章

  1. linux内核map图
  2. mysql的limit性能优化
  3. 云炬随笔20180613
  4. 第四范式受邀参加信息技术大讲堂 共探新基建发展趋势
  5. 网络工程师历年试题解析(PDF文字版)2004-2009
  6. 处理丢失和无效的数据值
  7. Etcd超全解:原理阐释及部署设置的最佳实践
  8. ABAP术语-Implementation
  9. 【已解决】SVN设置为中文 最全面
  10. 使用FastReport报表工具生成标签打印文档
  11. 全网最详细的ensp模拟器安装教程
  12. 万年历c语言代码单链表,万年历的C语言实现
  13. html图片指定refere,前端解决第三方图片防盗链的办法 - html referrer 访问图片资源 403 问题...
  14. vue获取facebook用户邮箱、头像并登录
  15. UEFI开发探索42 – Protocol的使用1
  16. 2019.3 计算机考试资料大放送
  17. 我的电脑硬盘由SSD+HD组合,在HD上成功安装CentOS6.9
  18. 华为往事(九)--邳州开局
  19. USART串口协议和USART串口外设(USART串口发送串口发送和接收)
  20. JAVA房产中介预约看房系统毕业设计 开题报告

热门文章

  1. 清理linux 系统内存缓存
  2. ELEMENT UI中关于上传图片el-upload控件删除(同时删除后台图片信息)
  3. 图片信息用浏览器显示:data:image/png;base64,+图片内容
  4. 10月 区块链领域投融资事件
  5. 【Excel】根据空格拆分单元格
  6. 零点起算法44求最小值C语言,【算法链表面试题】面试问题:C语言实现“关… - 看准网...
  7. php eval 禁止,php5.x禁用eval的操作方法
  8. SEO入门一篇就够-SEO教程
  9. mysql数据库连接池锁_数据库连接池deadlock
  10. 猜字游戏的各种玩法(附详细源码+演示结果),你都玩过吗?