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

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. 创建一个类的对象
    像C++

  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学习

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值