介绍
- Objective-C是C语言的严格超集,也就是在OC中使用C语言的语法是合法的。OC原意就是在C语言上加入面向对象的特性。
- 文件扩展名:.h | .m | .mm。.m可以包含oc和c代码;.mm可以包含oc/c/C++代码。
- 部分C语言的合法代码是在oc中的意义不一定相同。
- OC中采用引用计数的方式进行内存管理,所以不需要使用malloc和free。
对象(object)就是“基本构造单元”(building block),开发者通过对象来存储并传递数据。在对象之间传递数据并执行任务的过程就叫做“消息传递”(Messaging)。当程序运行起来以后,为其提供支持的代码叫做“Objective-C运行期环境”(Objective-C runtime),它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。
——《Effective Objective-C 2.0》
面向对象编程
面向对象编程(Object-Oriented Programming)的首字母缩写为 OOP,这是以一种编程技术,是为了编写模拟程序而开发的。OOP 是一种编程架构,可构建由多个对象组成的软件。
OOP 的一个关键概念 -> 间接:在代码中通过指针间接获取某个值,而不是直接获取。间接是 OOP 的核心,OOP 使用间接来调用某个函数,而不是直接调用。
类(class):是一种表示对象类型的结构体。对象通过它的类来获取自身的各种信息,尤其是执行每个操作需要运行的代码。
对象(object):是一种包含值和指向其类的隐藏指针的结构体。
实例(instance):是对象的另一种称呼。
消息(message):是对象可以执行的操作,用于通知对象去做什么。
方法(method):是为了响应消息而运行的代码。
方法调度(method dispatcher):是 Objective-C 的一种机制,用于推测执行什么方法以响应某个特定的消息。
接口(interface):是类为对象提供的特性描述。
实现(implementation):是使接口能正常工作的代码。
作者:Junexx
链接:https://www.jianshu.com/p/2929e16d3971
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
指针和堆栈
- OC中指针是用来指示对象的。如NSString str = @“it is a string”;
- 对象存放在堆中,而指针存放在栈中,指针实际上就是指向对象在堆中的内存地址。
在OC中,有时会遇到不含*的变量,他们可能会使用栈空间。比如CoreGraphics框架中的CGRect:
CGRect frame;
frame.origin.x = 0.0f;
frame.origin.y = 10.0f;
在这里,CGRect是C语言中的结构体,并不是OC中的类,所以不需要使用*来定义。
使用结构体的好处是性能高。创建对象需要额外的开销,例如分配和释放堆内存。如果只是需要保存int、float等非对象类型,那么通常使用结构体更合适。
消息传递模型
- 在OC中,可以用消息传递来描述对象之间的方法调用。
- 调用方法视为给对象发送消息。
- 所有方法视为对消息的回应。
- 一个类别不保证一定会回应收到的消息,如果类别收到了一个无法处理的消息,程序只会抛出异常,不会出错或崩溃。
OC中调用方法的方式:
[object method: arguement]
发送消息给不存在的方法:
[car fly]
如果car类别阿中定义了fly方法便执行fly,若car不存在fly方法,则程序依旧可以通过编译,但在运行期会抛出异常。
理解:fly是消息,car是消息的接收者,car收到消息后决定如何回应这个消息