一、iOS中_cmd

  1. The _cmd variable is a hidden argument passed to every method that is the current selector

源码:

  1. - (void)tryMessage
  2. {
  3. SEL currentSel = _cmd; // 通过_cmd关键字取到当前函数对应的SEL
  4. NSLog(@"currentSel is :%s",sel_getName(currentSel)); // C代码结果
  5. NSLog(@"currentSel is :%@",NSStringFromSelector(_cmd)); //O-C代码结果
  6. }

得到结果:

  1. -- :::] currentSel is tryMessage
  2. -- :::] currentSel is tryMessage

二、Class 东东

第一遇到Class的时候,我记得是这里:

  1. @interface NSObject <NSObject> {
  2. Class isa OBJC_ISA_AVAILABILITY;
  3. }
  1. #if !OBJC_TYPES_DEFINED
  2. /// An opaque type that represents an Objective-C class.
  3. typedef struct objc_class *Class;
  4.  
  5. /// Represents an instance of a class.
  6. struct objc_object {
  7. Class isa OBJC_ISA_AVAILABILITY;
  8. };
  9.  
  10. /// A pointer to an instance of a class.
  11. typedef struct objc_object *id;
  12. #endif
  1. struct objc_class {
  2. Class isa OBJC_ISA_AVAILABILITY;
  3.  
  4. #if !__OBJC2__
  5. Class super_class OBJC2_UNAVAILABLE;
  6. const char *name OBJC2_UNAVAILABLE;
  7. long version OBJC2_UNAVAILABLE;
  8. long info OBJC2_UNAVAILABLE;
  9. long instance_size OBJC2_UNAVAILABLE;
  10. struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
  11. struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
  12. struct objc_cache *cache OBJC2_UNAVAILABLE;
  13. struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
  14. #endif
  15.  
  16. } OBJC2_UNAVAILABLE;

objc_class结构体

objc_class和objc_object分别是类结构体对象结构体,其中objc_object都有一个只想对象本身所属的类的isa指针,用她来处理很多事情。id代表ObjC对象,获取id对象的类;

三、IMP(Method Impletiontations)

  1. /// A pointer to the function of a method implementation.
  2. #if !OBJC_OLD_DISPATCH_PROTOTYPES
  3. typedef void (*IMP)(void /* id, SEL, ... */ );
  4. #else
  5. typedef id (*IMP)(id, SEL, ...);
  6. #endif

显而易见,IMP是一个函数指针,这是由编辑器生成的,当你发起一个ObjC消息之后,最终她会执行的那个代码,就是由这个函数指针指定的。

runtime笔记一的更多相关文章

  1. iOS 学习 - 2.据网址显示源码

    输入网址,解出源码,显示label 我这里是在第二个界面显示的,用的属性传值. A界面先从 storyboard 拖个 textfield 和一个 button .m里面button的方法 //按钮点 ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  6. 我的runtime学习笔记

    0.简介: OC方法不同于C语言函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 至于其他理论上的东西不必讲太多,编程讲的就 ...

  7. iOS开发笔记之Runtime实用总结

    前言 runtime的资料网上有很多了,部分有些晦涩难懂,我通过自己的学习方法总结一遍,主要讲一些常用的方法功能,以实用为主,我觉得用到印象才是最深刻的.另外runtime的知识还有很多,想要了解更多 ...

  8. runtime学习笔记

    获取属性objc_property_t * propertys = class_copyPropertyList(clazz, &outCount); 获取属性名NSString * key ...

  9. runtime - Method详细笔记

    Runtime中Method详细介绍 1.找到它,认识它 //*> 在objc/runtime.h中定义了Method类型,Method是一个objc_method结构体指针,结构体中包含SEL ...

随机推荐

  1. Social Emotional Computing -价值观的运算

    第三节 价值观的运算 第三节  价值观的运算 由于价值观的客观本质就是事物的价值率,因此价值观的运算在客观本质上就是价值率的运算.由于价值观的运算就是为了揭示不同事物价值观之间的函数关系,因此价值观的 ...

  2. Sublime Text 必备插件

    收集网址:http://segmentfault.com/a/1190000002748032

  3. C 语言学习的第 05 课:了解课程配套的平台

    在此之前,已经同授课老师沟通,确认课程的配套平台是Coding.net.对于大多数(甚至是全部)同学来说,这个平台应该是极其陌生的.不过不用担心,且还是娓娓道来. 定义:Coding.net是一个集代 ...

  4. 3-cd 命令总结

  5. Oracle之物化视图

    来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...

  6. android file path

    问题 出现的异常为:java.lang.IllegalArgumentException: File /mnt/sdcard/crazyit.bin contains a pathseparator. ...

  7. Ubuntu里的若干问题解决方案

    1. Ubuntu里出现两个屏幕,并且其中一个是“未知显示器”,无法去除时,可以尝试使用该命令:sudo apt-get install bumblebee-nvidia 2.虚拟机上Ubuntu开机 ...

  8. 【BZOJ 1568】【JSOI 2008】Blue Mary开公司

    经典的splay维护凸壳,但是看了看zky学长的题解最后决定写线段树维护标记永久化. Round1考到了这个之后一直没有理解标记永久化,CTSC也因为自己的缺陷丢掉了一些部分分,so sad 看来以后 ...

  9. sublime text 3之快捷键操作

    1.安装插件 https://packagecontrol.io/installation 2.将 Tab缩进(制表符缩进) 改为 4个空格 打开Preferences -> Settings- ...

  10. asp.net mvc 简单文件下载

    文件下载,先获取文件的路径,在通过招到文件的存放地址,通过return File(path, "text/plain", Url.Encode(name));,可以直接下载,但是必 ...