iOS 之动态运行时 runtime <二>

/* Working with Classes */

/**
 * Returns the name of a class.
 *
 * @param cls A class object.
 *
 * @return The name of the class, or the empty string if \e cls is \c Nil.
 */
OBJC_EXPORT const char *class_getName(Class cls)
     __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

/**
 * Returns a Boolean value that indicates whether a class object is a metaclass.
 *
 * @param cls A class object.
 *
 * @return \c YES if \e cls is a metaclass, \c NO if \e cls is a non-meta class,
 *  \c NO if \e cls is \c Nil.
 */
OBJC_EXPORT BOOL class_isMetaClass(Class cls)
     __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

/**
 * Returns the superclass of a class.
 *
 * @param cls A class object.
 *
 * @return The superclass of the class, or \c Nil if
 *  \e cls is a root class, or \c Nil if \e cls is \c Nil.
 *
 * @note You should usually use \c NSObject‘s \c superclass method instead of this function.
 */
OBJC_EXPORT Class class_getSuperclass(Class cls)
     __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

/**
 * Sets the superclass of a given class.
 *
 * @param cls The class whose superclass you want to set.
 * @param newSuper The new superclass for cls.
 *
 * @return The old superclass for cls.
 *
 * @warning You should not use this function.
 */
OBJC_EXPORT Class class_setSuperclass(Class cls, Class newSuper)
     __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_5, __IPHONE_2_0,__IPHONE_2_0);

/**
 * Returns the version number of a class definition.
 *
 * @param cls A pointer to a \c Class data structure. Pass
 *  the class definition for which you wish to obtain the version.
 *
 * @return An integer indicating the version number of the class definition.
 *
 * @see class_setVersion
 */
OBJC_EXPORT int class_getVersion(Class cls)
    __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

/**
 * Sets the version number of a class definition.
 *
 * @param cls A pointer to an Class data structure.
 *  Pass the class definition for which you wish to set the version.
 * @param version An integer. Pass the new version number of the class definition.
 *
 * @note You can use the version number of the class definition to provide versioning of the
 *  interface that your class represents to other classes. This is especially useful for object
 *  serialization (that is, archiving of the object in a flattened form), where it is important to
 *  recognize changes to the layout of the instance variables in different class-definition versions.
 * @note Classes derived from the Foundation framework \c NSObject class can set the class-definition
 *  version number using the \c setVersion: class method, which is implemented using the \c class_setVersion function.
 */
OBJC_EXPORT void class_setVersion(Class cls, int version)
    __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0);

/**
 * Returns the size of instances of a class.
 *
 * @param cls A class object.
 *
 * @return The size in bytes of instances of the class \e cls, or \c 0 if \e cls is \c Nil.
 */
OBJC_EXPORT size_t class_getInstanceSize(Class cls)
     __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
时间: 2024-10-12 20:33:10

iOS 之动态运行时 runtime <二>的相关文章

iOS 之动态运行时 runtime

前言: 最近研究runtime,觉得里面的东西好深,所以决定先把苹果提供的runtime.h文件简单的翻译一下,关于用法会在之后进行一些分享. /* Types */ #if !OBJC_TYPES_DEFINED /// An opaque type that represents a method in a class definition. typedef struct objc_method *Method; /// An opaque type that represents an i

IOS runtime动态运行时二

在C#.Java中有编译时多态和运行时多态,在OC中,只有运行时的多态,这与它的运行机制有关.OC中,方法的调用是通过消息的传递来进行的.在IOS runtime动态运行时一http://www.cnblogs.com/5ishare/p/4708647.html中主要大致介绍了下运行时的过程,这篇主要看下消息转发(实现多态的基础). 一.引入 在<objc/objc-runtime.h>中有两个.h,<objc/runtime.h>和<objc/message.h>,

iOS 运行时(runtime)浅析

本博客,直接从分类说起.都知道OC中的分类是不能直接添加属性的,意思间接是能添加属性的.那应该怎么添加呢?那就要用到运行时(runtime)机制. 一,运行时金典用法之一 现在,给HGPerson类增加一个分类:HGPerson+HG.h,给一个属性如下: @property (nonatomic, copy) NSString* name; 貌似,这样写了以后,是能调用的,但是运行就报错了. -[HGPerson setName:]: unrecognized selector sent to

iOS App 的运行时

App被启动时,从非运行状态到短暂的非激活状态,然后切换到运行状态或者后台运行状态.在启动过程中,操作系统对App创建了一个主线程来调用main方法. main方法是App的入口,用来调用UIKit框架和做一些程序运行前的预处理.XCode项目模板自动生成了mian方法,调用UIApplicationMain iOS也有自动内存管理,ARC(Automatic Refenerce Counting),@autoreleasepool中的代码的内存管理被ARC托管 App在后台运行时,会监听一些后

iOS运行时Runtime浅析

运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@selector(doSomething))来执行.这篇博客会较为全面的来讲解下Runtime. OC是一门动态语言,它将很多静态语言在编译和链接时做的事放到了运行时来处理.这种动态语言的优势在于:写代码能更加灵活,可以把消息转发给想要的对象,或者随意交换一个方法的实现. OC Runtime目前有两个版本:M

iOS动态性 运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)

借助前辈的力量综合一下资料. OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动态修改的.本文旨在对runtime的部分特性小试牛刀,更多更全的方法可以参考系统API文件<objc/runtime.h>,demo例子可以参见CSDN的runtime高级编程系列文章. 我们出发吧! 先看一个非常平常的Father类: #import <Fou

iOS 运行时RunTime使用场景一:打点统计用户行为,深度解耦

转自:http://www.jianshu.com/p/0497afdad36d 用户统计.jpeg 用户行为统计(User Behavior Statistics, UBS)一直是移动互联网产品中必不可少的环节,也俗称埋点.在保证移动端流量不会受较大影响的前提下,PM们总是希望埋点覆盖面越广越好.目前常规的做法是将埋点代码封装成工具类,但凡工程中需要埋点(如点击事件.页面跳转)的地方都插入埋点代码.一旦项目越来越复杂,你会发现埋点的代码散落在程序的各个角落,不利于维护以及复用.本文旨在探讨利用

iOS运行时 runtime

1.运行时介绍 1. 什么是运行时 运行时机制是用 C++开发的,是一套苹果开源的框架 OC 是基于运行时开发的语言,在OC中所有的类都是运行的时候才加载. 2. OC语言 OC 是一个全动态语言,OC的一切都是基于 Runtime实现的 只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法 3. 使用场景 1. 运行时动态获取类的属性 //主要应用:字典转模型框架 MJExtension,JSONModel 2.利用关联对象为分类添加属性 3.利用交换方法拦截系统或其他框架的方法

【iOS开发-97】MediaPlayer框架中MPMoviePlayerController类视频播放的使用,运行时runtime

(1)使用媒体播放,需要先加载<MediaPlayer/MediaPlayer.h>框架,并#import导入.媒体播放需要注意的几个点在于: --全屏的设置需要在视图可见后设置才有效. --各种控制主要是通过通知NSnotificationCenter来实现的,有进入/退出全屏,播放暂停状态改变等等. #import "WPMoviePlayController.h" #import <MediaPlayer/MediaPlayer.h> @interface