关于Runtime在项目中使用的总结
来源:互联网 发布:淘宝网商城天天特价 编辑:程序博客网 时间:2024/05/11 05:26
关于Runtime在项目中使用的总结
关于Runtime其实有很多事情可以做,具体可以参考头文件objc/runtime.h,本文主要介绍在项目使用过程中,通过Runtime解决了的几个问题的用法。
[TOC]
- 解决接口属性隐藏问题
- 解决检查页面创建释放问题 (检查项目中的页面推出时dealloc是否调用)
问题一:解决接口属性隐藏问题
问题描述:在编写SDK的时候,经常发现一些接口文件中,有部分属性不需要暴露给用户,但是在SDK内部其他文件中又需要使用该属性,最开始碰到这种问题最傻的解决办法就是拆分为两个不相关的文件。以下提供两个我在项目中使用过的方法(依次演进):
方案1:
在主类的实现文件(比如ClassA.m)中申明需要隐藏的属性(对外部不可见),然后在类别(ClassA + Private.h)中添加对应的属性,这样就可以处理不需要公开给SDK外部使用,而且对内部透明的属性和方法:
在SDK的头文件中不暴露ClassA + Private.h,然后SDK内部其他类中,如果要使用相关的属性和方法,可以直接引入ClassA + Private.h头文件,就可以顺利使用。目前这种方式只是在ClassA + Private.m中会有相应的警告,但目前未发现其他问题。
方案2:
ClassA.m中不添加属性,只在类别中ClassA + Private.h中添加属性,通过Runtime中的objc_getAssociatedObject()和objc_setAssociatedObject()两个方法实现动态添加属性。
问题二:解决检查页面创建释放问题 (检查项目中的页面推出时dealloc是否调用)
问题描述:在优化一个旧项目的时候,有时候需要知道每个页面是否正常及时释放,但是由于之前编码人员未给每个页面都写了dealloc方法或者未在dealloc中输出打印,现在为了在每个页面释放的时候,打印一些信息。解决这个问题,主要方案如下(依次演进):
方案1:
最傻的方法,每个要验证的页面添加dealloc打印,然后运行查看 。缺点:工作量太大;
方案2:
增加一个上帝类,在这个类中实现dealloc打印功能,然后让其他页面继承自这个页面。缺点:无法解决多继承,而且对于新人需要指导这个用法;
方案3:
为UIViewController建一个Category,然后重写dealloc方法覆盖页面本身的dealloc方法。缺点:本来的dealloc中其他的释放工作丢失;
方案4:
用Runtime方式解决这个问题,先给UIViewController增加一个类别,通过runtime中的class_addMethod()方法动态给UIViewController添加dealloc方法,用method_exchangeImplementations()方法,将UIViewController中的dealloc与自己的一个打印方法交换,无需要改其他代码,实现所有页面的释放的打印。方案4代码截图(主要是不知道怎么添加代码)如下:
写在最后
虽然看过很多大神写的Runtime文章,目前就只在项目中使用了这两种情况。欢迎大家在评论区提供更好的解决方案或者想法,第一次用Markdown写博客,表示还不会用。。。
- 关于Runtime在项目中使用的总结
- iOS中runtime的使用总结
- 总结iOS中runtime的使用
- 总结iOS Runtime中使用的函数
- iOS --- 如何在Swift项目中使用runtime?
- runtime的使用总结
- 我在项目管理中关于需求分析的总结
- Eclipse在使用Jface关于org.eclipse.core.runtime包导入之后项目依然报错的问题
- 关于在android项目中使用fragment的个人经验
- 关于在android项目中使用fragment的个人经验
- 关于Android中Runtime.exec()方法的使用误区
- mysql常在项目中使用的语句总结
- 学习Celery在项目中使用的总结
- java关于Runtime的使用
- 关于runtime的使用心得
- 关于在SetWindowLong函数中使用cbWndExtra的一点总结
- 在mobileportal项目中使用Yii总结
- Java中Runtime的使用
- UE4蓝图案例:媒体播放器的开关(2)
- 对字符串编码的js函数
- win10 Edge浏览器无法打开网页怎么办
- 深入理解init_5-----属性服务(基于Android 2.2,代码源自Google)
- JAVA高级软件架构师实战培训阶段二
- 关于Runtime在项目中使用的总结
- JS小练习1(cssText)
- Eclipse Debug 界面应用详解——Eclipse Debug不为人知的秘密
- Ubuntu14.04下快速安装ns3
- HAL_TIM_PWM源码理解
- 【面试题】剑指offer 15
- 【Scala】Scala之Objec
- mysql的编码问题引起MyISAM转换InnoDB
- TCP中的四种计时器