Xcode通过.m扩展名来表示文件使用的是Objective-C代码,应由OC编译器处理。其他比如.c由C编译器处理,.cpp对应C++编译器。而LLVM编译器能编译它们三种。
#import
#import作用为保证头文件只被包含一次。(避免一个文件包含一个文件而后者又包含前者的状况)
- 头文件:包含结构体、符号常量和函数原型等元素的生命的文件
#import<Foundation/Fondation.h>
表示告诉编译器查找Foundation框架中的Foundation.h头文件。
框架
框架(一种把头文件、库、图片、声音等内容聚集在一个独立单元中的几何体)苹果的框架{Cocoa,Carbon,QuickTime,OpenGL};Cocoa{Foundation,Application Kit};
支持型框架{Core Animation,Core Image}
这么多框架,每个都有一个主头文件,我们只要通过在主头文件中使用#import,就可以访问框架内的所有功能。
BOOL
- Objective-C的布尔数据类型BOOL具有两个值:YES和NO。
- Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的类型定义(typedf),它使用8位的存储空间,通过#define指令把YES定义为1,NO定义为0。
id
什么是id?:id表示的是标识符(identifier)。是一种泛型,可以用来引用任何类型的对象。因为对象是一种包含代码的struct结构体,因此id实际上是一个指向结构体的指针。
调用
通知对象执行某种操作称为发送消息(调用方法)。
如[shape draw]
就表示向shape对象发送draw消息。
而向对象发送消息后,就需要类来调用所需的代码:
1、对象是消息的目标,需要查出它属于哪一个类。
2、在对应类中浏览代码,查找对应函数的位置。
3、找到对应函数后,执行。
类
类(class)是一种表示对象类型的结构体。对象通过它的类来获取自身的各种信息,尤其是执行每个操作需要运行的代码。
对象(即实例instance)
对象(object)是一种包含值和指向其类的隐藏指针的结构体。
消息
消息(message)是对象可以执行的操作,用于通知对象去做什么。
方法
方法(method)是为响应消息而运行的代码。
接口(API)
接口(interface)是类为对象提供的特性描述。
实现
实现(implementation)是使接口能正常工作的代码。
@interface
创建某个特定类的对象之前,Objective-C编译器需要一些有关该类的信息,尤其是对象的数据成员及其提供的功能。可以用interface指令把这些信息传递给编译器。
在@interface和@end之间可能包含各种数据成员,或者方法。
方法声明(method declaration)
例如 - (void)setBounds:(ShapeRect)bounds;
其中左边减号代表对象方法,类似的若为"+"号则为类方法,对象方法由对象调用,类方法由类调用;
(void)代表方法不返回任何值;方法的名称实际为setBounds:,有冒号代表方法是有参数的,冒号后面分别为参数类型、参数名,若方法没有参数则不可加冒号。
@implementation
@interface部分负责定义类的公共接口,而@implementation部分则包含了能使对象能够运行的代码。它是一个编译器指令,表明你将为某个类提供代码,一般为 @implementation 类名
。
在@implementation中可以定义那些在@interface中没有声明过的方法,作为仅能在当前类实现中使用的私有方法。然而并不是说这样做就不能从该实现之外访问该方法。Objective-C中不存在真正的私有方法,也无法把某个方法标识为私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用。
实例化对象
实例化(instantiation):实例化对象时,需要分配内存,然后将这些内存初始化并保存为有用的默认值,这些值不同于通过新分配的内存获得的随机值。内存分配和初始化工作完成后,就意味着新的对象实例已经创建好了。
self
每个方法调用都包括一个名为self的隐藏参数,它是对象自身。使用self参数后,方法可以查找并操作对象的数据。