功能:修改父类不可修改函数方法,函数方法交换 应用场景:假如我们使用的他人提供一个的framework,.m已被打包成二进制.a无法修改源码,只留下.h头文件,那假如代码中某个函数出现了问题可以通过这样的方法进行修改某个函数 一:利用category进行方法覆盖 我们知道,利用category,可以达到“方法覆盖”的效果: 比如: // // Teacher.h #import <Foundation/Foundation.h> @interface Teacher : NSObject -…
在OC的消息机制中主要分为三个阶段,分别为: 1.消息发送阶段:从类以及父类的方法缓存列表和方法列表查找方法. 2.动态解析阶段:在消息发送阶段没有找到方法,则会进入这个阶段,负责动态添加方法实现. 3.如果没有实现动态解析方法,则会进行消息转发阶段,将消息转发给可以处理消息的接受者来处理. 如果以上都没有实现就会报出找不到方法的崩溃. 一.消息转发 首先判断这个对象是不是nil,如果是就相当于直接break,如果有,则会通过对象的isa指针找到这个类,在缓存的方法列表中查找,如果有则执行,没有…
NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h> @interface ClassA : NSObject @end 那么NSObject里面具体有什么呢? 我们点到它的头文件里面去看看 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; //每个NSObject对象都拥有一个Class类作为成员…
1.成员变量可以理解为所有在类的头上声明的,无论是@interface.@implementation下用大括号括起来或者是用@property声明的变量都可以称作这个类的 成员变量,只是在@implementation下声明的变量是这个类的私有变量,外部无法访问的,而在@interface下声明的变量可设定为全局或者私有变量, 而用@property声明的就是全局变量,是外部既可以访问,内部也可以调用的 2.首先确定一下,对象.xxx的语法后跟的不是成员变量,是一个可以被访问的方法名,之所以让…
在OC中,当像一个对象发送消息,而对象找到消息后,从它的类方法列表,父类方法列表,一直找到根类方法列表都没有找到与这个选择子对应的函数指针.那么这个对象就会触发消息转发机制. OC对象的继承链和isa指针链如图: 消息转发流程如下: 1.先调用实例方法resolveInstanceMethod 如果作者在这里使用runtime动态添加对应的方法,并且返回yes.就万事大吉.对象找到了处理的方法, 并且将这个新增的方法添加到类的方法缓存列表 2.如果上面的方法返回NO的话,对象会调用forward…
在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而假设在子线程中须要去使用Handler的时候,我们就须要显式地去调用Looper的 prepare方法和loop方法,从而为子线程创建其唯一的Looper. 详细代码例如以下: class LooperThread extends Thread { public Handler mHandler; public void run…
摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成…
转载自:http://m.blog.csdn.net/blog/util_c/10287909 在Objective-C中,message与方法的真正实现是在执行阶段绑定的,而非编译阶段.编译器会将消息发送转换成对objc_msgSend方法的调用.     objc_msgSend方法含两个必要参数:receiver.方法名(即:selector),如:     [receiver message]; 将被转换为:objc_msgSend(receiver, selector);      …
OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创造的成员变量交由系统统一处理,不需要外部人员干预,有点像java中gc(垃圾回收机制). 2)之前是没有自动内存管理机制的,后期苹果想拓展自己的开发市场,吸引其他平台开发者入住ios开发阵营,其中收到内存管理是很发杂的一块,对于转入IOS开发者不利,因此苹果推出了自动内存管理机制. 2.接下来我们将…
本文授权转载,作者:Sindri的小巢(简书) 从异常说起 我们都知道,在iOS中存在这么一个通用类类型id,它可以用来表示任何对象的类型 —— 这意味着我们使用id类型的对象调用任何一个方法,编译器都不会进行报错.比如下面这段代码: 1 2 id wrongArr = @"This is a NSString instance."; [wrongArr addObject: @"The operate will crash your application"];…