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. Android 自学之网格试图(GridView)和图片切换器(ImageSwitcher)功能和用法

    网格试图(GridView)用于在界面上按行,列分布的方式来显示多个组件. GridView和ListView有共同的父类:AbsListView,因此GridView和ListView具有一定的相似 ...

  2. ganymed-ssh2使用

    通过maven库获取ganymed-ssh2-262.jar,这是一个实现了ssh2协议的工具包,可以远程连接linux机器,执行命令,有些工作全靠它了 示例代码如下: <!--首先要建立连接, ...

  3. VbCrlf的相关说明

    今天从别人发来的手顺书中发现了这几个字母,一头雾水,下面查了一下相关资料. vbCrLf是Visual Basic中的一个字符串常数,即“Chr(13) & Chr(10)”(回车符与换行符连 ...

  4. 1172 Hankson 的趣味题

    1172 Hankson 的趣味题 2009年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Descrip ...

  5. 【Slickflow学习】.NET开源工作流介绍、下载(一)

    第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-介绍 这里摘录Slickflow官网的介绍: Slic ...

  6. 在jQuery环境下制作轻巧遮罩层

    遮罩层的好处就是可以屏蔽用户对遮罩层下方元素的操作. 制作原理很简单:1设置遮罩层触发按钮 2设置遮罩层内容 3设置遮罩层背景(重点是捕获内容div的大小位置)4设置点击触发按钮遮罩层背景内容同时显示 ...

  7. Ajax B/S 聊天工具txt文件保存

    打算做一个两个或多个网页之间交流的功能,思路是多个页面聊天的内容存放到一个文件里,每个页面都有提交聊天功能,当提交聊天信息时保存到上面那个文件里, 在每个也页面里放一个定时器,每秒钟获取聊天文件里的记 ...

  8. CSS之图片旋转

    主方法为: var Img = function() { var T$ = function(id) { return document.getElementById(id); } var ua = ...

  9. Apache配置多端口多站点

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

  10. OC1_协议语句

    // // Programmer.h // OC1_协议语句 // // Created by zhangxueming on 15/6/24. // Copyright (c) 2015年 zhan ...