OC语言概述

1.OC语言概述

1>Foundation.h我们称之为主头文件, 主头文件中又拷贝了该工具箱中所有工具的头文件, 我们只需要导入主头文件就可以使用该工具箱中所有的工具, 避免了每次使用都要导入一个对应的头文件

工具箱的地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

规律: 所有的主头文件的名称都和工具箱的名称一致

所有的主头文件都是导入了该工具箱中所有工具的头文件

2>import和include的区别:

import 的功能和 include一样, 是将右边的文件拷贝到当前import的位置

 为了降低程序员的负担, 防止重复导入, 避免程序员去书写头文件, 那么OC给出来一个新的预处理指令import

 import优点: 会自动防止重复拷贝

 因为OC完全兼容C, 所以可以在OC程序中编写C语言代码

 并且可以将C语言的源文件和OC的源文件组合在一起生成可执行文件

3>printf和NSLog的区别:

     NSLog会自动换行

     NSLog在输出内容时会附加一些系统信息

     NSLog和printf接收的参数不一样

2.第一个OC类

OC中要定义一个类也分声明和实现,也就是说以后我们在OC中定义类,就是在写类的声明和实现

1>如何编写类的声明

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

注意:类名的首字母必须大写

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

事物名称: iPhone

 属性: 颜色, 型号, cpu, 尺寸   == 成员变量

 行为:打电话, 发短信, 上网, 获取本机信息    == 成员方法

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

例如:

@interface Iphone : NSObject

{

   

@public

    float _model; // 型号  0

    int _cpu; // cup   0

    double _size; // 尺寸  0

    int _color; // 颜色  0

}

注意:编写0C类的属性的时候,建议将所有属性的名称前面都加上 _(原因再后边会讲到,就是getter和seter中名字问题).

类名后边的 :NSObject是为了让我们的类具备创建对象的能力,也是类的一个父父类.

注意:默认情况下,OC类中的属性是不能直接访问的,这就是后边讲到的protected修饰符

只要让类中的属性公开,以后就可以直接通过一个指向结构体的指针来操作对象中的属性

n(int argc, const char * argv[]) {

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

在OC中想要通过一个类来创建一个对象, 必须给类发送一个消息(好比C语言中调用函数一样)

如何发送消息?   

在OC中只要想要发送消息就先写上 [类名称/对象名称 方法名称];

发送什么消息(调用什么方法)可以创建一个对象呢? 

new

    

     只要通过一个类调用类的new方法, 也就是给类发送一个叫做new的消息之后

     系统内部就会做3件事情

     1. 为Iphone类创建出来得对象分配存储空间

     2. 初始化Iphone类创建出来的对象中的属性

     3. 返回Iphone类创建出来的对象对应的地址

通过一个Iphone类型的指针接收了 Iphone对象的地址

如果使用给一个指针保存了某一个对象的地址, 那么我们就称这个指针位之为某个类型的对象

利用Iphone类型的指针保存了Iphone对象的地址, 那么我们就称Iphone类型的指针p之为Iphone对象

OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体

3>函数和类中行为的区别

OC中的行为和C语言中的函数一样, 都是用来保存一段特定功能的代码

 C语言中定义一个函数, 分为声明和实现, 声明写在.h中, 实现写在.c中

 OC中定义一个方法, 也分为声明和实现, 声明写在@interface中, 实现写在@implementation

 C语言的函数分为两种: 内部函数和外部函数

 OC中的方法也分为两种; 类方法和对象方法

 类方法只能用类名调用, 对象方法只能用对象调用

 OC中的类方法用+表示, OC中的对象方法用-表示

 编写C语言函数的规律: 1.确定函数名称 2.确定形参 3.确定返回值 4.确定返回值类型

 编写OC方法也有规律, 规律和C语言一模一样

()的作用:

注意: OC中的方法, 如果没有形参不需要写(), 而是直接写一个;

为什么OC中没有形参不需要写()呢? 因为OC方法中的()有特殊的用途, OC方法中的()是用来扩住数据类型的

4>C语言的函数:

 没有返回值没有参数的

 有返回值没有参数的

 有返回值有参数的

 没有返回值有参数的 

有返回值没有参数的, 读取短信

- (char *)loadMessage;

有返回值有参数的, 打电话

int signal(int number);

注意: OC中的方法如果有参数, 那么每个参数的数据类型前面必须加上一个:

注意: 当前这个有参数的方法它的方法名称是  signal:

冒号也是方法名称的一部分

- (int)signal:(int)number;

有返回值并且有多个参数的, 发短信

int sendMessage(int number, char *content);

下面这个方法的方法名称是 sendMessage::

- (int)sendMessage:(int)number :(char *)content;

为了提高我们的阅读性, OC方法允许我们给每个参数添加一个标签来说明当前参数的含义

注意: 标签也是方法名的一部分

[对象 消息名称(方法名称)]

注意: OC中的NSLog对C语言的字符串支持不是很好, 如果返回的是中文的C语言字符串可能输出的是乱码, 也有可能什么都不输出

如果定义类方法, 类方法的写法和对象方法一模一样, 除了前面的-号不同以外 ,只需要将对象方法的-号换成+, 那么就定义了一个类方法

5>类方法和对象方法的区别

 0. 对象方法以-开头

    类方法以+开头

 1. 对象方法必须用对象调用

    类方法必须用类来调用

 2. 对象方法中可以直接访问属性(成员变量)

    类方法中不可以直接访问属性(成员变量)

 3. 类方法和对象方法可以进行相互调用

    4.1对象方法中可以直接调用类方法

    4.2类方法中间接调用对象方法  (注意: 不建议这样使用)

    4.3类方法中可以直接调用其它类方法

    4.4对象方法中可以直接调用对象方法

 类方法的应用场景

 如果方法中没有使用到属性(成员变量), 那么能用类方法就用类方法

 类方法的执行效率比对象方法高

 类方法一般用于定义工具方法

    字符串查找

    文件操作

    数据库操作

6>isa

创建对象的时候返回的地址其实就是类的第0个属性的地址

但是需要注意的是: 类的第0个属性并不是我们编写的_age, 而是一个叫做isa的属性

isa是一个指针, 占8个字节

     

其实类也是一个对象, 也就意味着Person也是一个对象

平时我们所说的创建对象其实就是通过一个 类对象 来创建一个 新的对象

类对象是系统自动帮我们创建的, 里面保存了当前对象的所有方法

而实例对象是程序自己手动通过new来创建的, 而实例对象中有一个isa指针就指向了创建它的那个类对象

原文地址:https://www.cnblogs.com/micalafei/p/4774614.html