iOS开发——常用Runtime函数

Runtime函数

1.可以通过NSObject的一些方法获取运行时信息或动态执行一些消息:
1./*Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.*/
1.+ (BOOL)isSubclassOfClass:(Class)aClass;
1./*Returns a Boolean value that indicates whether instances of the receiver are capable of responding to a given selector.*/
1.+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
例如:if ([[Retangle class] respondsToSelector: @selector(print)]==YES) {……}
/*Returns a Boolean value that indicates whether the receiver is an instance of a given class.*/
- (BOOL)isMemberOfClass:(Class)aClass; 例如:[obj isMemberOfClass:[Retangle class]];

除此之外还有: conformsToProtocol 检查对象是否实现了指定协议类的方法 methodForSelector 返回指定方法实现的地址 performSelector:withObject 执行SEL 所指代的方法

- (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)object; - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; 这三个方法,均为同步执行,与线程无关,主主线程和子一程中均可调用成功。等同于直接调用该方法。在需要动态的去调用方法的时候去使用。 例如:[self performSelector:@selector(test2)] 与[self test2];执行效果上完全相同。

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes; - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay; 这两个方法为异步执行,即使delay传参为0,仍为异步执行。只能在主线程中执行,在子线程中不会调到aSelector方法。可用于当点击UI中一个 按钮会触发一个消耗系统性能的事件,在事件执行期间按钮会一直处于高亮状态,此时可以调用该方法去异步的处理该事件,就能避免上面的问题。 在方法未到执行时间之前,取消方法为:
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument; + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget; 注意:调用该方法之前或在该方法所在的viewController生命周期结束的时候去调用取消函数,以确保不会引起内存泄露。

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array; - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; 这两个方法,在主线程和子线程中均可执行,均会调用主线程的aSelector方法 如果wait传YES,则为异步执行,如果wait传NO,则为同步执行。
注意:apple不允许程序员在主线程以外的线程中对ui进行操作,此时我们必须调用performSelectorOnMainThread函数在主线程中完成UI的更新

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array; - (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait; 调用指定线程中的某个方法。分析效果同3。

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 起子线程在后台运行

时间: 2025-01-15 21:08:09

iOS开发——常用Runtime函数的相关文章

iOS 开发常用的调试命令

XCode4.0以后,编译器是LLVM,控制台调试命令前缀是lldb 第一.LLVM简介 LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time).链接时间(link-time).运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本. 第二. 对关注编译技术的开发人员,LLVM提供了很多优点: 现代化的设计 LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

IOS开发常用设计模式

IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存. 所以苹果提供了一个UIAccelerometer的实例化方法+sharedAcceler

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

iOS 开发常用的一些工具

http://www.itjhwd.com/ios-tool/ 通用工具 HomeBrew:OS X上非常出色的包管理工具. 源码控制 Git:分布式版本控制系统和源码管理系统,其优点是:快和简单易用.对于新手来说,可在此查看免费电子书籍. GitHub:声望日盛的资源分享之地. BitBucket:GitHub的替代选择. GitHub for Mac:一个设计的非常美观的git客户端,不能取代你从命令行获得的所有功能,但使用起来非常简单. SourceTree:Windows和Mac上免费

iOS开发常用的网站(转老师的)

iOS开发常用的网站 iOS开发常用的网站 1.cocoachina http://www.cocoachina.com 2. github http://www.github.com 3.code4app http://www.code4app.com 4.UI4app http://www.ui4app.com 5.www.oschina.com http://www.oschina.net/ 6.pudn 程序员联合开发网 http://www.pudn.com 7.csdn 中国软件开发

iOS开发常用的宏

有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 #define kScreenIphone5 (([[UIScreen main

iOS开发常用工具类

iOS开发常用工具类(提高开发的工作效率) 前言 作为一个开发者应该学会去整理收集开发常用的工具类,这些复用的工具可以在项目开发中给你很大程度提高你的工作效率.难道你不想早点完成工作,然后出去撩妹.陪女朋友或者回家陪老婆孩子吗?反正我想早点回家??. 一.常用的宏定义 善于利用宏在开发中过程中会减少很多工作量比如定义开发过程中的常用尺寸,这样在后续开发中不用为了改一个相同尺寸而满世界的去找这个尺寸在哪用到了.宏定义用的很广泛,例如屏幕的宽高,网络请求的baseUrl等等下面是自己整理的一些示例:

【iOS开发-116】内存测试管理和优化:Analyze和Profile,以及iOS开发常用工具simPholders、fabric

(1)关于Analyze和Profile的使用和介绍 --使用,长按左上角的Run,会出现Analyze和Profile两个选项.Analyze是静态内存分析,如果有潜在的内容泄露问题会出现蓝色的标记.Profile是动态内存分析,这个比较详细一点,可以看到程序的每个模块占用多少内存等等. 推荐的博客: IPhone开发工具篇-利用xcode profile和analyze进行性能优化 备注:自从有了ARC,内存泄露问题大大减少了,但不代表没有.对内存有疑问或者对于老项目从非ARC转ARC有困难