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. template和templateUrl区别与联系

    templateUrl其实根template功能是一样的,只不过templateUrl加载一个html文件,template后面根的是html的标签. .state('menu.about', { u ...

  2. [设计模式]<<设计模式之禅>>之关于单一职责原则

    单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 这个原则存在争议之处在哪里呢?就是对职责的定义,什么是类的职责,以及怎么划分类的职责.我们先举个 ...

  3. 使用PL/SQL删除百万条记录的大表

    使用PL/SQL删除百万条记录的大表: 最近开发人员对测试环境数据库进行了压力测试,数据库中产生了大量的脏数据.有几张大表里数据量均在百万甚至千万条的记录数.开发人员现提出需求如下: 只清理其中的部分 ...

  4. 网易新闻RSS阅读器

    首先需要分析网易RSS订阅中心的网页布局情况. 网易RSS订阅中心:http://www.163.com/rss/ 你会发现RSS文件由一个<channel>元素及其子元素组成,除了频道本 ...

  5. RNN-theano代码解析

    import theano import numpy import os import pdb from theano import tensor as T from collections impo ...

  6. Entity Framework 6.1 学习系列1--概况、安装

    原文:Entity Framework 6.1 学习系列1--概况.安装 Entity Framework:实体框架,看名字就知道是针对模型数据的.这是MS推出的一款ORM工具. 与NHibernat ...

  7. OC 成员变量作用域

    1.  成员变量作用域:    @public :在任何地方都能直接访问对象的成员变量.    @private :只能在当前类的对象方法中直接访问.(@implementation中默认是@priv ...

  8. 学习之spring自带缓存

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://w ...

  9. 集成产品开发-IPD简介

    内训IPD流程,听完后,觉的流程的力量很强大,可以高效的团队几千上万人的研发团队,来正确地为同一个目标前进.因为讲解者是从华为出来的,所以,相关的案例分析以及理解,都是以华为研发为模板来讲解的.这没错 ...

  10. switch的case中不能做定义

    switch的case中不能做定义 只能给语句 error: a label can only be part of a statement and a declaration is not a st ...