OC 学习第一天

摘要:
OC在C语言的基础上增加了一层最小的面向对象语法,这与C语言完全兼容。OC类声明中的属性只能位于write@interface和@end之间的{}中。

1. OC简介

OC是一种面向对象的计算机语言。

OC实在C语言的基础上增加了一层最小的面向对象语法,完全兼容C语言。

2. OC学习目标

- 语法学习

- 建立面向对象思维能力

-建立基本项目需求分析能力

3. 面向对象思想

面向对象是一种对现实世界理解和抽象的方法,关注的是解决问题需要哪些对象,将功能封装进对象,强调具备了功能的对象。

4. 类与对象

OC中的类相当于图纸,用来描述一类事物。然后利用类来创建对象,对象是类的具体存在。

因此面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象。

4.1 如何编写类的存在

以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可。

类名的首字符必须大写。

声明一个类的目的就是为了告诉系统, 我们这个类中有哪些属性和行为。

OC类声明中属性只能在写@interface和@end之间的{}中。

注意: 编写OC类属性的时, 建议将所有属性的名称前面都加上_。

类名后面的 :NSObject 是为了让我们的Iphone类具备创建对象的能力。

默认情况下, OC对象中的属性是不能直接访问的,属性前加上@public可以让类中的属性公开, 以后就可以直接通过一个指向结构体的指针来操作对象中的属性。

4.2 如何编写类的实现

以@implementation开头, 以@end结尾, 然后在class对应的地方写上声明时声明的类的名称, 必须和声明的类名一模一样。

4.3 如何通过一个类来创建对象

使用对象调用方法就是OC中的消息机制。

OC中调用方法的格式:[类名或者对象名 new]。(new为方法名称)

[类名或者对象名 new]做了三件事:在堆内存中开辟了一块新的存储空间;初始化成员变量(写在类声明大括号中的属性就叫成员变量,也叫实例变量);返回指针地址。

4.4 对象的注意点

可以通过 对象->对象成员(注意声明属性为:@public) 的方式访问对象中的成员。

每一个对象中都有一份属于自己的属性。

对其中一个对象的成员进行了修改,和另一个对象没有关系。

5. 对象方法的声明和实现

5.1 对象方法的声明

格式:

xxffsm.png

特征:

对象方法以-开头如 -(void)xx。

对象方法只能由对象来调用。

对象方法中可以访问当前对象的成员变量。
调用格式 [对象名 对象方法名]。

5.2 对象方法的实现

必须写在以@implementation开头,@end之间。
在声明的后面加上{}即表示实现。
讲需要实现的代码写在{}中。

6. 类方法的声明和实现

6.1 类方法的声明

格式:

将对象方法-号变为+号

特征:

节省内存空间。
不依赖于对象,执行效率更高。
能用类方法解决的问题,尽量使用类方法。

类方法应用的场景:

当方法内部不需要使用到成员变量时,可以改为类方法。
类方法一般用于编写工具方法。

6.2 类方法的实现:同类方法一样。

7. 对象的存储细节

7.1 对象的存储细节

类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。

7.2 isa指针

每一个对象都包含一个isa指针,这个指针指向当前对象所属的类。
isa是对象中的隐藏指针,指向创建这个对象的类。
通过isa指针我们可以在运行的时候知道当前对象是属于那个Class(类)的。

8. 函数与方法的对比

对象方法:
对象方法的实现只能写在@implementation...@end中,对象方法的声明只能写在 @interface...@end中间。
对象方法都以-号开头,类方法都以+号开头。
对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用。
函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。
对象方法归类对象所有。
函数:
所有的函数都是平行的。
函数不存在隶属关系。
使用的时候可以直接调用。
不可以访问对象中的成员变量。

9. 常见错误

@interface @end和@implementation @end不能嵌套包含。

OC是弱语法,可以只有@implementation,但实际开发中千万不要这样。

漏写@end。
两个类的对象声明顺序(可以把顺序打乱)。
成员变量没有写在{}里。
方法的声明写在了{}里面。
在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在。
方法无法像函数那样的调用。
成员变量和方法不能用static等关键字修饰,不要和c语言混淆。
类的实现可以写在mian函数后面,在使用之前只要有声明就可以。

免责声明:文章转载自《OC 学习第一天》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Debian 9 启动后进入命令行Unity3d Awake、OnEnable、Start生命周期下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

postman集合(变量及集合执行)

1.变量 1)按照作用域分为全局变量,环境变量,本地变量,数据变量(覆盖顺序为反方向) ->在集合运行器中,数据变量覆盖其他变量 2)变量使用 一般使用 在body中使用,需要预先设置     执行之后,可以查看当次变量值  3)数据文件 在可以使用环境变量的地方都可以使用数据文件,除了pre-requestScript,test 使用数据文件...

WebView2简单试用(六)—— 常用设置

初始化时设置 WebView2的初始化方式如下:     var env = await CoreWebView2Environment.CreateAsync();    await webView.EnsureCoreWebView2Async(env); 它可以通过创建一个变量来初始化,这个变量的工厂函数定义如下:     public stat...

进程间通信,把字符串指针作为参数通过SendMessage传递给另一个进程,不起作用

参数发送进程: CString csCmd=AfxGetApp()->m_lpCmdLine; if (!csCmd.IsEmpty()) { pWndPrev->SendMessage(MYWM_NEWPARAM,0,(LPARAM)(&csCmd)); } 参数接受进程: CString csCmd=_T(""); CStrin...

Linux内核调试方法总结之栈帧

栈帧 栈帧和指针可以说是C语言的精髓。栈帧是一种特殊的数据结构,在C语言函数调用时,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址。如下图所示:                         栈帧位于栈内存中,接下里我们用一个实例展示一下栈帧的入栈和退栈过程。  stackframe.c #incl...

C语言:字符数组 + 字符串指针

字符数组 C语言中没有特定的字符串类型,通常是将字符串放在一个字符数组中。 字符串指针 除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串。 char *str = "leetcode"; char *str; str = "leetcode"; 字符串中的所有字符在内存中是连续存放的,str指向的是字符串的第0个字符,即...

文件读写和文件指针的移动

read 函数 -#include <unistd.h> -ssize_t read(int fd, void *buf, size_t count); 从fd 所指的文件中读取count 个字节到buf 中。返回实际读取到的字节数,有错误发生则返回-1。读取文件时,文件读写指针会会随着读取到的字节数移动。 write 函数 -...