objc/runtime.h 相关

Objecitve-C的重要特性是Runtime(运行时),在Interacting with the Runtime(交互运行)中,运行时函数部分,苹果给出了/usr/lib/libobjc.A.dylib库,这个共享库提供支持动态属性的objective - c语言,通过其接口,可以用于开发将其他语言运行于Objective-C上的中间层(桥接层),库里的函数定义为纯C语言。

例如:class_getName

[cpp] view plaincopyprint?

  1. class_getName
  2. Returns the name of a class.
  3. const char * class_getName(Class cls)
  4. Parameters
  5. cls
  6. A class object.
  7. Return Value
  8. The name of the class, or the empty string if cls is Nil.
  9. Declared In
  10. runtime.h

这里我们要用库里的函数,干个“坏事”,查看苹果SDK的私有方法。

第一步:导入头文件

[cpp] view plaincopyprint?

  1. #import <objc/runtime.h>

第二步:添加下列代码

**************实用************

[cpp] view plaincopyprint?

  1. NSString *className = NSStringFromClass([UIView class]);
  2. const char *cClassName = [className UTF8String];
  3. id theClass = objc_getClass(cClassName);
  4. unsigned int outCount;
  5. Method *m =  class_copyMethodList(theClass,&outCount);
  6. NSLog(@"%d",outCount);
  7. for (int i = 0; i<outCount; i++) {
  8. SEL a = method_getName(*(m+i));
  9. NSString *sn = NSStringFromSelector(a);
  10. NSLog(@"%@",sn);
  11. }

第三步:想看什么类 就把UIView换成你想要的

当然,如果只是查看私有API,会有更简单的方法,可以使用工具class-dump,也可以通过此链接,https://github.com/kennytm/iphone-private-frameworks/tree/master/UIKit/    查看。

特别注意的是,如果是需要上架的APP,切勿使用私有API,会通不过APP Store的审核。

objc/runtime.h 相关

时间: 2024-12-29 07:29:01

objc/runtime.h 相关的相关文章

iOS Objc Runtime 教程+实例Demo

例子Demo 欢迎给我star!我会继续分享的. 概述 Objc Runtime使得C具有了面向对象能力,在程序运行时创建,检查,修改类.对象和它们的方法.Runtime是C和汇编编写的,这里http://www.opensource.apple.com/source/objc4/可以下到苹果维护的开源代码,GNU也有一个开源的runtime版本,他们都努力的保持一致. 应用场景 将某些OC代码转为运行时代码,探究底层,比如block的实现原理 拦截系统自带的方法调用(Swizzle 黑魔法),

objc runtime之属性扩展(objc_getAssociatedObject,objc_setAssociatedObject,objc_removeAssociatedObjects)

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 法:associative,可以通过它来扩展属性:在iOS开发中,可能category比较常见,相对的associative,就用的比较少,要用 它必须使用<objc/runtime.h>的头文件,然后就可以自由使用objc_getAssociatedObject以及 objc_setAssociatedObject,我们来看下这两个方法: 1.创建关联:参数设置

objc runtime 动态增加属性-备用(?)

objective-c中,有类别可以在不修改源码的基础上增加方法:近排在看别人的开源代码时,发现还可以动态增加属性.而且是在运行时,太牛B了. 使用运行时库,必须要先引入 objc/runtime.h 可以使用的函数如下: OBJC_EXPORT void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 这个函数 OBJC_EXPORT id objc_ge

#import &amp;lt;/usr/include/objc/objc-class.h&amp;gt; not such file or directory问题的解决方法

近期在使用一些开源的demo,打开后出现这个错误,然后能够把 #import </usr/include/objc/objc-class.h> 改动为以下 #import <objc/runtime.h> 这样才干够

IOS利用objc/runtime和KVC——快速归档解档

开发过程中有时需要存储一些轻量级的数据,对于IOS提供的几种数据存储方式在这时最合适当属对象归档:NSCoding 但是将对象数据进行归档解档时候需要实现两个方法: encodeWithCoder和initWithEncoder.encodeWithCoder就是编码,initWithCoder就是解码. encodeWithCoder方法传入的是一个NSCoder对象,实现的时候我们就可以调用encodeObject.encodeFloat. encodeInt等各种方法并通过指定键值进行编码

ObjC Runtime 黑魔法 — Method Swizzling

适用情境 项目中大量控制器需要在载入时进行日志统计或进行类似的处理.如果直接往所有控制器中进行代码编写,会产生大量的重复的代码,降低了代码后期的可读性,不利于维护.由于所有部分的逻辑代码相同,针对这种情况,以切面编程(AOP)思想为导向,利用 Method Swizzling 能极大降低这种(日志统计)非主要逻辑代码与控制器的耦合度. AOP概念详解(摘自百度百科) 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理

ios runtime的相关知识

一.iOS runtime原理 对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道runtime底层编译成C++语言之后做了什么? 查到一个大牛给资料,顿时对runtime有了一定认识! 我们随便写一个小程序,代码如下: person类头文件如下, <!-- lang: cpp --> #import <Foundation/Foundation.h> @interf

使用objc runtime实现iOS懒加载

使用objc runtime实现懒加载 地址:AutoPropertyCocoa 懒加载形式如下 - (id)lazyloadProperty{ if(_lazyloadProperty == nil){ _lazyloadProperty = [XClass ...]; } return _lazyloadProperty; } 一般使用宏定义可以轻松完成.但是没有一致性,移植差. 利用objc runtime的动态性实现懒加载可以实现即可增加又可删除功能,也可以避免污染类型.该三方弥补了目前

runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?

运行时机制,runtime库里面包含了跟类.成员变量.方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入<objc/message.h><objc/runtime.h> 1.是什么 1> runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API 2> 平时编写的OC代码, 在程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是