在OC中: API: class_addMethod往一个Class里添加method API: class_getInstanceMethod或class_getClassMethod可以判断某个SEL是否存在于Class API: method_exchangeImplementations 交换方法.   最近工作上做了一件事,简单点说就是需要把一些特定Class里的方法func,替换成Hook_func,当Hook_func执行完之后,再执行func.于是很简单地想到了往Class添加一…
前言: 方法替换,可以替换任意外部类的方法,而动态添加方法只能实现在被添加类创建的对象里,但是将方法替换和动态添加方法结合使用,可以实现,对任意外部类动态添加需要的方法,这个方法可以是类方法也可以是实例方法,这个外部类也可以是没有任何方法声明和实现的类. 主要思路: 使用运行时的方法替换将在外部类将自定义方法hy_resolveInstanceMethod或hy_resolveClassMethod(用hy_前缀表示是我自定义的方法)和需要被添加的类中的resolveInstanceMethod…
通过#import <objc/runtime.h>我们可以找到: /** * Returns a specified instance method for a given class. * * @param cls The class you want to inspect. * @param name The selector of the method you want to retrieve. * * @return The method that corresponds to th…
一.属性的get和set方法          1.自定义属性的set和get方法          private(set) var _image:UIImage?     //自定义属性get,set     var image : UIImage?{         get{             return _image         }         set(newValue){             _image = newValue             self.im…
spring IoC的id和name id的命名需要满足XML对id的命名规范,必须以字母开始,后面可以是字母.数字.连字符.下画线.句号.冒号等等号,但逗号和空格是非法的.如果用户确实希望用一些特殊字符进行Bean的命名,可以使用name属性,name属性几乎可以使用任何字符.id和name都可以指定多个,用逗号.分号或者空格分隔.spring配置文件中不允许出现相同的id,但可以出现相同的name:如果有多个name相同的bean,使用getBean(beanName)获取Bean时,将返回…
方法一:设置BarButtonItem的文本样式为透明颜色,代码如下: [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal]; [[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorA…
题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewController) 4个文件, 其中3个category中都实现了自定义viewDidLoad方法, 会对ViewController中的ViewDidLoad方法进行方法替换, 那么依次替换后(A B C)的方法执行顺序是什么呢? 记method_exchangeImplementations(M…
spring 提供了很多的注入方式,set注入.构造注入.p命名空间.c命名空间.字段注入等等,这些没啥可说的了. 方法注入 因为开发时我需要spring管理一个实例,但是这个实例并非单例,应该每一次调用都是一个新的实例.所以这时候有需要方法注入. 先创建一个Test类 package com.lhf.lookup; public class Test { public void work(){ System.out.println("我是一名java开发工程师"); } } 然后创建…
在上周associated objects一文中,我们开始探索Objective-C运行时的一些黑魔法.本周我们继续前行,来讨论可能是最受争议的运行时技术:method swizzling.   Method swizzling指的是改变一个已存在的选择器对应的实现的过程,它依赖于Objectvie-C中方法的调用能够在运行时进改变——通过改变类的调度表(dispatch table)中选择器到最终函数间的映射关系.   举个例子,假设我们想跟踪在一个iOS应用中每个视图控制器展现给用户的次数:…
简介 Objective c 语言尽可能的把决定从编译推迟到链接到运行时.只要可能,它就会动态的处理事情.这就意味着它不仅仅需要一个编译器,也需要一个运行时系统来执行变异好的代码.运行时系统就好像是Objective c 的操作系统.它让Objective c能工作. 这篇文章主要讲解NSObject类和Objective c如何于运行时系统交互.特别是,解释如何在运行时动态的加载新类,以及把消息转发给其他对象.同时也提供了在运行时如何获得对象信息的相关内容. 这里可以让你理解Objective…