一.OC与C的对比

  • 关键字
  • OC新增的关键字在使用时,注意部分关键字以"@"开头
  • 方法->函数
    • 定义与实现
  • 数据类型
    • 新增:BOOL/NSObject/id/SEL/block
  • 流程控制语句  
    • for (NSString * name in NSArray){NSLog(@”%@”, name);}
  • 新增特性
    • 封装性
    • 继承性
    • 多态性
  • 新增语法
    • 属性生成器

      • @property声明属性
      • @synthesize合成属性
    • 分类: 扩展类,无需子类化
    • 协议: 声明方法
  • Fundation框架/Foundation.h是主头文件
  • 新增异常处理
    • @try … @catch … @finally

二.OC程序

  • OC可以兼容C
  • import 与 include
    • import会自动重复拷贝
  • printf 与 NSLog
    • NSLog会自动换行
    • NSLog在输出时会附加一些系统信息
    • 他们接收的参数不一样
    • NSLog打印字符串时在""前加@

三.面向对象的思想

  • 面向过程强调的是功能行为,关注的是解决问题需要哪些步骤(需要亲力亲为)
  • 面向对象强调的是具备功能的对象,关注的是解决问题需要哪些对象(不需要亲力亲为),执行者转换成指挥者

四.类与对象

  • 类(名词提炼发)的设计: 描述属性(成员变量)和行为(成员方法)
  • 类的声明:
    @interface 类名 : 父类名(NSObject)
    {
    定义实例变量(成员变量/属性);
    } //行为声明 @end
  • 声明的目的: 告诉系统,这个类有哪些属性和行为
  • 注意
    • 类的名称首字母必须大写
    • OC类声明中属性只能写在@interface和@end之间的{}中
    • 编写OC属性时,建议将所有的属性名称前加下划线_
  • 定义行为时的注意点:
    • 谁最清楚这个行为,这个行为就属于谁
  • 类的实现:
    @implementation 类名(必须和声明时的类名一模一样)
    
    //行为实现
    
    @end;
  • 创建对象

类名 *对象名称 = [类名 new];

  • 调用new方法就可以创建对象
  • 要具备new方法à要在类名:后面加上NSObject
  • 发送消息(调用方法)

[类名/对象名称 方法名称];

  • 调用new系统内部进行的行为

    • 为类创建出来的对象在堆中分配存储空间
    • 初始化创建出来的对象中的属性
    • 返回创建出来的对象对应的地址
  • 如果使用一个指针保存了某个对象的地址,那么我们就称这个指针为某个类型的对象
  • 每一个对象都有属于自己的属性,可以通过对象->对象成员的方式访问对象中的成员,一个对象的成员进行修改跟另一个对象无关

五.类方法和对象方法

  • 类方法

    • 特征

      • 以+开头
      • 只能由类来调用
      • 调用格式[类名 方法名称];
      • 不能访问实例变量(成员变量),因为没有创建存储空间来存储类中的成员变量
      • 类方法中不能直接调用对象方法,要想调用对象方法,必须创建或传入对象。
      • 方法中可以直接调用类方法
    • 好处
      • 节省内存空间
      • 不依赖对象,执行效率高
    • 应用场景
      • 当方法内部不需要使用成员变量时
      • 一般用于编写工具方法

            字符串查找

              文件操作

              数据库操作

  • 对象方法

    • 特征

      • 以-开头
      • 只能让对象调用
      • 调用格式[对象名称 方法名称];
      • 能够访问实例变量(成员变量)
      • 可以调用当前对象的对象方法,也可以调用同一类别的其他对象的对象方法(创建对象/用self)
      • 方法中可以调用类方法
    • 注意:
      • 类方法与对象方法可以同名

六.对象的存储细节

  • 对象方法调用的过程

  • 类创建的每一个对象都占据一定的堆存储空间,并且都有一份属于自己的成员变量,方法存储在堆中的类对象中,并且在整个内存中只有一份
  • 创建对象的时候返回的地址是类的第0个属性,并不是定义的第1个属性,而是每个对象都有的isa指针.
    • isa指针是对象中的隐藏指针,存储着堆中类对象的地址
    • 通过isa指针可以在运行时知道当前对象属于哪个类

       知识点总结

    • 1.什么是面向对象?
          + 找对象使用对象的方法(功能)

    • 2.什么是对象?
          + 对客观事物的抽象

    • 3.什么是类?
          + 类就是用于描述对象的共性特征,是对对象的抽象
          + 主要用于描述对象的属性和行为

    • 4.如何定义一个类
          + 4.1类的声明
              * 声明类的目的: 告诉系统我们这个类中有哪些属性和方法
              * 类名: 首字母大写
              * : NSObject 为了让我们的类具备创建对象的能力, 也就是可以使用new方法
           @interface 类名 : NSObject
           {
              属性; // 属性必须写到{}中, 属性名称以_开头
           }
           方法; // 方法必须写到{}外面
           @end

          + 4.2类的实现
           @implementation 类名

           方法的实现

           @end

    • 5.如何创建对象
           要想创建对象必须给类发送一个new消息, 调用类的new方法

           >开辟存储空间
           >初始化属性
           >返回地址
           类名 *p = [类名 new];

          + 5.1如何发送消息?  [类名/对象名称 方法名称]

    • 6.修改对象的属性和获取对象的属性
          + 因为类的本质是一个结构体, 所以我们是用一个指向结构体的指针保存了对象的地址, 所以我们可以通过指针操作结构体的方式来操作对象
          + p->属性名称 = 值;  // 对象的属性默认是受保护的, 必须把属性变为公开的才可以直接访问@public
          + NSLog(@"age = %i", p->age);

    • 7.类中可以定义两种方法
          + 7.1对象方法
              * 以-开头
              * 可以直接访问对象的属性
              * 必须使用对象调用
              * 对象方法中可以直接调用其它对象方法
              * 对象方法中可以直接调用类方法

          + 7.2类方法
              * 以+开头
              * 不可以直接访问对象的属性
              * 必须使用类调用
              * 类方法中不可以直接调用对象方法
              * 类方法中可以直接调用类方法

          + 7.3方法定义的注意点
              * 方法名采用 驼峰命名
              * 方法中的数据类型都必须使用()括起来
              * 方法中每个参数的数据类型前面都必须加上:
              * :也是方法名的一部分

    • 8.C与OC字符串的区别

      + C中的字符串不是对象,而OC里是对象,因此,具备了很多功能
      - 如何计算字符串的长度
          + C中
              * size_t size = sizeof(name);//包含\0
              * size_t length = strlen(name);//不包含\0

          + OC中
              * >* NSString *str = @"贺梦洁";
                >* NSUInteger len = [str length];
                >* NSLog(@"len = %lu", len);//计算出的是个数,而不是占用的字数

      - NSString *str = [NSString stringWithFormat:@"age = %i, height = %f\n", 30, 1.75];//调用类方法,字符串格式化

    • 注意:

      • 输出C语言的字符串用%s,OC中用%@,%@专门用于输出对象类型

OC简单介绍的更多相关文章

  1. iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍

    UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...

  2. iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

    XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...

  3. CocoaPods常用终端命令及Profile文件简单介绍

    Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...

  4. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  5. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  6. oc-12-NSString 类简单介绍及用法

    // 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...

  7. SQLite简单介绍

    一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...

  8. FMDB(一)— 简单介绍

    在iOS开发过程中常常会用到数据库方面的操作,但是iOS原生的SQLite API使用起来并不十分友好,对于C语言基础较薄弱的朋友来说.使用起来可能会认为比較不便.于是,一些第三方的对SQLite A ...

  9. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

随机推荐

  1. sklearn之转换器和估计器

    sklearn之转换器和估计器 转换器 估计器(sklearn机器学习算法的实现) 转换器 想一下之前做的特征工程的步骤? 实例化(实例化的是一个转换器类(Transformer)--特征工程的父类) ...

  2. pipeline学习

    目录 一.常用语法 二.基础使用 三.使用 Groovy 沙盒 四.参数化构建过程 五.pipeline script from SCM 六.参考 一.常用语法 1.拉取git仓库代码 checkou ...

  3. mybatis-plus查询指定字段

    show me the code :mybais-plus版本:3.1.1 1,排除某些字段,可以同时排除多个字段排除多个字段写法: .setEntity(new User()) .select(c ...

  4. 菜鸟Markdown笔记,看这个就够了

    菜鸟markdown语法笔记 1.标题 写法:共六级标题,一个#是一级标题,两个#是二级标题,三个#是三级标题······以此类推 (#)+空格键,快捷方式是Ctrl+1/2/3/4/5/6 2.段落 ...

  5. Java 中的关键字

    Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...

  6. HTTPS-自己生成数字证书

    一.获取证书的途径 自签名证书,适用于开发者测试HTTPS,最快速的途径就是生成自签名证书,非常方便. Let's Encrypt证书,可以使用免费CA机构签发的证书. 使用收费CA机构签发的证书,如 ...

  7. [luogu1526]智破连环阵

    (以下在描述复杂度时,认为$n$和$m$相同,因此一律使用$n$) 称第$i$个炸弹能匹配非空区间$[l,r]$,当且仅当$l$到$r$内所有武器都在$i$攻击范围内,且$r=m$或第$r+1$个武器 ...

  8. [bzoj1188]分裂游戏

    容易发现所有豆子相互独立,只需要考虑每一个豆子的sg函数并异或起来即可,sg函数从后往前暴力即可 1 #include<bits/stdc++.h> 2 using namespace s ...

  9. 【CSS】水平居中和垂直居中

    水平居中和垂直居中 2019-11-12  15:35:37  by冲冲 1.水平居中 (1)父级元素是行内元素,子级元素是行内元素,子级元素水平居中 ① 设置父级元素为块级元素 display:bl ...

  10. Linux检测磁盘空间

    在linux中,文件系统将所有的磁盘都并入一个虚拟目录下,在使用新的存储媒体之前,需要把它放到虚拟目录下,这项工作称为挂载. 1.mount命令 mount会输出当前系统上挂载的设备列表,要在虚拟目录 ...