0808

分类的使用注意
  • 分类只可以增加方法,不可以增加成员变量
  • 分类可以访问原来类中声明的成员变量
  • 分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
  • 方法调用的优先级:分类-->原来类-->父类
  • 多个分类包含同一方法的话,看后编译的方法覆盖先编译的方法

类的本质
  • 一个对象或者类本身调用 class 方法都可以获取到内存中的类对象.类在内存中只有一份,类的实例对象,实例化一个就再内存中为该对象分配一份内存.成员变量是和对象在一起的,方法是和类在一起的.
  • 有时我们可以通过一个类已经实例化的对象来获取到该对象所属的类,进而来完成类的alloc和init 如下图:


类的加载过程
  • 先加载父类再加载子类.在类(分类也一样)被加载的时候会调用load方法,当类第一次加载会调用initialize,但如果分类里面也有initialize方法的话则只调用分类里的方法.load方法无论怎么都调用,以为只要程序一启动类就会加载,一旦加载就会调用load方法,只会调用一次,所以load方法是不管类和分类的.并且,加载的时候先加载原始类再加载分类

如下图所示:


deacription方法
  • description 有类方法和对象方法,下面的两点都是对对象的deacription方法来说的.
  • 以我的经验,description可以获取到NSURL对应的NSString类型的url链接地址
  • 我们可以重写description方法来达到我们想输出的内容的目的.调用NSLog(@"%@", p)就会调用description对象方法.所以不要在重写的description方法里调用NSLog(@"%@", p)方法,不然会死循环.

NSLog(@"%@", p)这个是打印指针p所指向的对象的类名+对象地址

NSLog(@"%p", &p)这个是打印指针p的地址

NSLog(@"%p", p)这个是打印指针p所指向的对象的地址

如下图所示:

当调用类的desription方法的时候只会显示类的名称


输出日志增强


SEL(类和SEL都是运行时的一些机制)
  • SEL对应的是方法的地址。一个对象调用一个方法的时候,首先将方法包装成SEL类型的数据,然后根据SEL数据找到对应的方法地址,最后根据方法地址调用对应的方法.调用过方法一次之后SEL就会被缓存,下次再调用的时候就会直接方法找到来执行.

如下图所示:

每一个方法内部都有一个cmd,这个cmd是个SEL类型的,代表当前方法,打印一下即可看出来

如下图所示:

iOS 基础 第三天(0808)的更多相关文章

  1. IOS基础之 (三) 类的声明和对象的创建

    一 OC类的声明和实现语法 1.接口的声明 @interface NewClassName: ParentClassName { 实例变量 ... } 方法的声明 ... @end //...表示省略 ...

  2. iOS 基础 第三天(0807)

    0807 成员变量作用域###### 如下图所示: 这里要注意手写的成员变量/实例变量默认的作用域是private,所以外部指针类型的对象无法直接访问,这起到一定的保护作用.但可以在当前类内部@imp ...

  3. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  4. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  5. XMPPFrameWork IOS 开发(三)登录

    原始地址:XMPPFrameWork IOS 开发(三) XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataSto ...

  6. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  7. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  8. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  9. RequireJS基础(三)

    这篇来写一个具有依赖的事件模块event. event提供三个方法bind.unbind.trigger来管理DOM元素事件. event依赖于cache模块,cache模块类似于jQuery的$.d ...

随机推荐

  1. ubuntu禁用笔记本自带键盘

    ubuntu如何禁用笔记本键盘 打开终端运行命令 xinput list Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core ...

  2. 使用 autoconf

    在此之前先说一下autooconf在linux下安装的问题,因为不知道怎么安装,我就直接在终端上输入autoconf,结果它会提示是否安装它,下面还有指定安装的方法,我 就直接输入,是什么命令记不住了 ...

  3. Emmet 语法大全(缩写语法/sublime 插件)

    Emmet 使用类似于 CSS 选择器的语法描述元素在生成的文档树中的位置及其属性. 元素 可以使用元素名(如 div 或者 p)来生成 HTML 标签.Emmet 没有预定义的有效元素名的集合,可以 ...

  4. 从零单排Linux – 3 – 目录结构

    从零单排Linux – 3 – 目录结构 1.FHS标准(filesystem hierarchy standard) why? –> 为了规范,还有为了linux的发展 重点 –> 规范 ...

  5. C#算法基础之快速排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. 程序生成SiteMapPath文件

    //创建站点地图 private void CreateSiteMap(DataSet ds) { XmlDeclaration declareation; declareation = xmlDoc ...

  7. asp网站发布步骤总结

    1.在VS2012中打开索要发布的网站,初始页可重命名为index.html或default.apx. 2.点击  生成>生成“网站”,然后“发布网站”. 3.进行发布设置: (1 配置文件 ( ...

  8. Apache配置多端口多站点

    配置httpd.conf 监听多个端口 复制代码 代码如下:# Listen: Allows you to bind Apache to specific IP addresses and/or # ...

  9. linux c/c++ IP字符串转换成可比较大小的数字

    由www.169it.com搜集整理 IP字符串转换成可比较大小的数字,具体代码如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include "stdio. ...

  10. sql server日期时间转字符串(转)

    一.sql server日期时间函数Sql Server中的日期与时间函数 1.  当前系统日期.时间     select getdate()  2. dateadd  在向指定日期加上一段时间的基 ...