Day01-Object-C语法基础

1. C程序补充

···
int main(int argc, const char * argv[]){
    printf("你好%s",argv[1]);
    return 0;
}
···
1. 返回值代表程序的结束状态
     0 代表正常结束, 非0代表非正常结束
2.  参数
    argv数组的第0个元素的值, 是这个正在运行的程序的路径。
    argc代表的是数组的长度
    我们在运行程序的时候,可以将程序放在终端运行,在终端运行的时候可以为这个程序传入一些数据
    程序名   数据....
3. 你要清楚一件事情。
    我们写的程序可以在终端中运行,运行的时候可以为程序传递一些数据。
    传递的方式:
    程序名 数据1 数据2 数据3.....
    在程序的内部如何拿到
    argc代表用户传递的数据的个数
    argv数组中每1个元素存储的就是用户传递过来的数据, 第0个元素就是程序的路径。

2. OC与C的对比

1. oc程序的编译、链接、执行。
    1). 在.m文件中写上符合oc语法规范的源代码
    2).使用编译器将源代码编译为目标文件
      cc -c xx.m
      a.预处理
      b.检查语法
      c.编译
      3).链接
      cc xx.o
      如果程序中使用到了框架中的函数或者类,那么在链接的时候,就必须要告诉编译器去哪个框架中找这个函数或者类
      cc xx.0 -framework 框架名
      cc main.o -framework Foundation
      程序中用到了哪个框架的功能,那么就在这个地方告诉编译器
      4).链接成功后,就会生成个a.out可执行文件,执行就可以了
2. 我们点击运行按钮 所有的事情Xcode就帮助我们自动做了
3. oc程序和c程序各个阶段的后缀名对比
        源文件   目标文件  可执行文件
    c    .c            .o               .out
    oc    .m          .o               .out

3. oc与c的对比

1. oc中的数据类型
    1). oc中支持c语言中的所有的数据类型
    a.基本数据类型
    int double float char
    b.构造类型
    数组 结构体 枚举
    c.指针类型
    int *p1;
    d.空类型
    void
    e. typedef自定义类型
  2) BOOL类型
    1).可以存储YES或NO
    2).一般情况下BOOL类型的变量用来存储条件表达式的结果,如果条件表达式成立,那么结果就是YES, 如果条件表达式不成立, 结果就是NO
    3). BOOL的本质
    typedef signed char BOOL;
    实际上BOOL类型的变量是1个有符号的char变量
    #define YES ((BOOL)1)
    #define NO ((BOOL)0)
    YES 实际上就是1
    NO 实际上就是0
 3) Boolean
     a.Boolean 类型的变量可以存储true或false
     b. 一般情况下Boolean类型的变量用来存储条件表达式的结果, 如果条件表达式成立,那么结果就是true 如果条件表达式不成立, 结果就是false
     c.本质
     typedef unsigned char Boolean;
     #define true 1
     #define false 0
     4). class 类型 类
     5). id类型 万能指针
     6).nil 与null差不多
     7). SEL方法选择器
     8).block代码段

4. 面向过程与面向对象

1. oc是在c的基础上
    a. 将c复杂的繁琐的恶心的语法封装的更为简单
    b.在c语言的基础上新增了一小部分的面向对象的语法
2. 实现需求之一
3. 代码世界的面向过程与面向对象
     1). 面向过程
     在遇到1个需求的时候,实现这个需求的每1个步骤都是自己写代码亲自的去一步步的实现,这样的解决问题的方式我们就叫做面向过程
2).面向对象
    在遇到1个需求的时候,不要亲自去实现, 而是找个专门做这件事的人来帮助我们搞定,这样的解决问题的方式就叫做面向对象
4. 面向对象和面向过程优缺点分析
  c语言是1们面向过程的语言, 有功能的概念但是没有人的概念
  oc语言是1们面向对象的语言
  面向过程的解决问题的缺点: 后期的维护和修改不方便
  面向对象的解决问题的优点:后期的维护和修改十分方便
  使用面向对象设计我们的程序,可以让我们的程序在后期的维护和修改中更加的方便和快捷
5. 如何使用面向对象来设计程序呢
  当你遇到1个需求的时候, 不要亲自去实现
  1). 先看看有没有现成的人是专门做这个事情的, 框架. 如果有直接使用
  2). 如果没有. 就自己造出1个拥有这样的功能的人, 那么造出来的这个人可以多次使用的

5. 类与对象

1. 什么是对象? 对象是现实生活的1个具体存在, 看得见. 摸得着 拿过来就可以直接使用
2. 什么是类
     物以类聚人以群分
     类是对一群具有相同特征或者行为的事物的1个统称,抽象的, 不能直接使用的
     如果非要使用类的话,只能去找到这1类事物中的1个具体存在,然后使用这个具体存在
3. 案例
     食物.
     水果.
     苹果.
     烟台苹果
     小东早上吃的那1个颗苹果.

     交通工具.
     车
     汽车
     奔驰汽车.
    奔驰汽车CLS350
4. 类和对象之间的关系
    类是模板,类的对象是根据这个模板创建出来的
    类模板中有什么,对象中就有什么,绝不可能多也不可能少
    类是制造月饼的模子,模子不可以吃,所以类不能直接使用
    对象是根据模子制造出来的月饼,模子上有什么,月饼上有什么, 不会多也不会少,月饼可以吃,所以对象可以使用
5. 如何设计1个类
    类的作用:用来描述一群具有相同特征和行为的事物的
    设计类的三要素
    类的名字.你要描述的这类事物叫什么名字
    这类事物具有的相同的特征,这类事物拥有什么
    这类事物具有的共同的行为,这类事物会做什么
6. 如何找到类
    名词提炼法:分析整个业务流程,分析出现了哪些名词,这些名词就是你要找到的类
    3辆坦克发射了6枚炮弹打中了3架飞机
    坦克类
         特征:型号, 大小, 颜色, 重量, 材质, 射程
         行为: 行驶, 发射
         炮弹类
         特征: 型号, 大小, 威力, 颜色, 重量
         行为: 飞, 爆炸
         飞机类
         特征:型号, 作为数量
         行为: 飞 爆炸

6 类与对象

1. 请问是先有类还是先有对象?
    从现实的角度 一定是先有对象再有类
    从代码的角度 一定是先有类再有对象
2.  再一次确认类的作用: 描述1群具有相同特征和行为的事物的
3. 如何定义类
    1). 类的三要素
    2). 定义类的语法
    a. 位置 直接写在源文件之中 不要写在main函数之中
    b.类的定义分为两个部分
    ->类的声明
    @interface 类名:NSObject
    {
    这类事物具有的共同的特征, 将他们定义为变量
    }
    功能就是1个方法,将方法的声明写在这里
    @end
    ->类的实现
    @implementation 类名
    将方法的实现写在这里
    @end
    3).几点注意
    a. 类必须要有声明和实现
    b.类名用你描述的事物的名称来命名就可以了
    c.NSObject 是神马意思 不用管, 照写就可以了
    d. 用来表示这类事物的共同的特征的变量必须要定义在@interface的大括号之中
    e. 定义在大括号中用来表示这类事物的共同的特征的变量我们叫做
    属性  成员变量 实例变量 字段....
    f.为类定义属性的时候,属性的名词必须以_开头 下划线开头
    语法是固定的.
    @interface 类名:NSObject
    {
    这类事物具有的共同的特征定义为变量.
    数据类型 变量名1;
    数据类型 变量名2;
    ....
    }
    @end
    @implementation 类名
    @end
4. 类的定义
     1). 类的作用
     2). 类的三要素.
     3).类的定义
5. 类是无法直接使用的, 如果非要使用这个类的话, 就必须要先找到这个类中的1个具体存在, 再使用这个对象
    类和对象的关系: 类中有的东西 这个类的对象也有 不会多少也不会少, 对象就可以使用 这个时候我们就可以使用对象里面的东西
    如何创建1个类的对象呢?
    语法: 类名 *对象名 = [类名 new];
    Person *p1 = [Person new];
    根据Person这个类的模板,创建了1个对象名字叫做p1;
    p1对象的特点:
    ->可以直接使用;
    ->类中定义的东西 这个对象中也有 不会多也不会少
6. 如何    使用对象;
    如何访问对象的属性:
    1). 默认情况下, 对象的属性是不允许被外界直接访问的
如果允许对象的属性可以被外界访问, 那么就在声明属性的地方加1个@public关键字
    2). 访问对象的属性的方式
        对象名->属性名 = 值;
        对象名->属性名;
        (*对象名).属性名;
        平时使用的时候,使用->

7. 方法的声明实现和调用

1. 定义1个类
    分为类的声明和实现
    @interface 类名:NSObject
    {
    属性 属性表示类的特征.
    }
    方法的声明; 方法表示类的功能.
    @end
    @implementation 类名
    方法的实现;
    @end
2. 1类事物不仅具有相同的特征还具有相同的行为.
    行为就是1个功能, c语言中使用函数表示1个功能
    oc的类具有的行为, 我们使用方法来表示..
    方法和函数都表示1个功能
3. 无参数的方法
    1).声明
    a.位置:在@interface 的大括弧的外面
    b. 语法:
    -(返回值类型)方法名称;
    -(void)run;
    表示声明了1个无返回值并且无参数的方法, 方法名字叫做run
    2). 实现
    a.位置:在 @implementation 之中实现
    b.实现的语法:
    将方法的声明拷贝到@implementation之中, 去掉分号 追加大括弧1对, 将方法实现的代码写在大括弧之中
    3).调用
    a.方法是无法直接调用的, 因为类是不能直接使用的, 必须要先创建对象
    那么这个对象中就有类中的属性和方法了 就可以调用对象的方法了
    b.调用对象的方法.
    [对象名 方法名];
4. 带1个参数的方法
    1). 声明
    a. 位置:在@interface的大括弧的外面
    b.语法:
    -(返回值类型)方法名称:(参数类型)形参名称;
    -(void)eat:(NSString *)foodName;
    定义了1个方法, 这个方法没有返回值.
    这个方法的名字叫做eat.
    这个方法有1个参数类型是NSString *类型的 参数的名字叫做foodName
    -(void)eat:(NSString *)foodName;
    2).实现
    a.位置:在@impelmentation之中实现
    b. 语法: 将方法的声明拷贝到@implementation之中.去掉分号 追加大括弧1对 将方法实现的代码写在大括弧之中.
    3). 调用
    a. 方法是无法直接调用的 因为类是不能直接使用的, 必须要先创建对象.那么这个对象中就有类的属性和方法了 就可以调用对象的方法了
    b. 调用语法:
    [对象名 方法名:实参];
    方法中的数据类型都要用1个小括号括起来
    -(返回值类型)方法名称:(参数类型)参数名称;
5. 带多个参数的方法
    1)声明
    a.位置:在@interface的大括弧的外面
    b.语法:
    -(返回值类型)方法名称:(参数类型)形参名称1:(参数类型)参数名称2:(参数类型)参数类型3;
    -(int)sum:(int)sum1:(int)sum2;
    表示声明了1个方法, 这个方法的返回值类型是int类型的.
    方法的名称叫做sum: :
    有两个参数, 参数类型都是int类型 参数名称叫做num1 num2
    2). 实现
    a.位置:在@impelmentation之中实现
    b.实现的语法:将方法的声明拷贝到@implementation之中, 去掉分号 追加大括弧1对 将方法实现的代码写在大括弧之中.
    3). 调用:
    a.方法是无法直接调用的, 因为类是不能直接使用的, 必须要先创建对象.那么这个对象中就有类的属性和方法了 就可以调用对象的方法了
    b. 调用带多个参数的语法
    [对象名 方法名:实参1:实参2:实参3];
6. 带参数的方法声明的规范:
    1). 如果方法只有1个参数 要求最好这个方法的名字叫做 xxxWith;
    xxxWithxxx
    eatWith:
    eatWithFood:
    这样写的话,那么调用方法的时候看起来就像是1条完整的语句, 提高了我们代码的阅读性
    遵守的规范:就是让我们的方法调用的时候看起来像1条完整的语句.
    2).如果方法有多个参数 建议这个方法名称:
    方法名with:(参数类型)参数名称 and:(参数类型)参数名称 and:(参数类型)参数名称;
    -(int) sumWith:(int)num1 and:(int)num2;
    sumWith: and:

8. 使用注意

1. 同1个类可以创建无数个对象.
2. 同1个类的多个对象之间毫无关系. 虽然他们拥有相同的属性和方法.属性的值是不会相互影响的
3. 在方法的实现中, 可以直接访问属性.
    在方法中访问的属性是谁的属性呢?
    这个方法是通过那1个对象来调用的,那么方法中的直接访问的属性就是那1个对象的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值