• 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指针就指向了创建它的那个类对象

  • 相关阅读:
    [NOI2003],[AHOI2006]文本编辑器
    luogu P5151 HKE与他的小朋友
    [NOI2005]维护数列
    [HNOI2012]永无乡
    luogu P4146 序列终结者
    [SCOI2016]美味
    UVA1451 Average
    [JSOI2007]字符加密
    luogu P3809 【模板】后缀排序
    CentOS 7系统启动后怎么从命令行模式切换到图形界面模式
  • 原文地址:https://www.cnblogs.com/micalafei/p/4774614.html
Copyright © 2020-2023  润新知