1. 目标 工作中,需要解决这样一种问题,测试每一个目标接口的调用时间和返回值。逻辑较为通用,所以想使用反射来实现这种功能。 2. 背景知识 网上查了下,发现反射有两种实现方式,分别为 runtime中的objc_msgSend 和 NSInvocation。 2.1 objc_msgSend 具体可参考这篇文章:https://www.jia
对于下面的代码,打印的结果是啥 #import "LBStudent.h" @implementation LBStudent - (instancetype)init { self = [super init]; if (self) { NSLog(@"[self class] = %@", [self class]); NSLog(@"[super class] = %@", [super
AutoreleasePool 自动释放池(NSAutoreleasePool):An object that supports Cocoa’s reference-counted memory management system. 使用示例: 在MRC环境下 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Code benefitting from a local autorelease poo
错误提示并且报pycharm异常退出 objc[27880]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. objc[27880]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called
1、分类中添加关联属性 类中声明属性 @property(nonatomic,assign) int age; 相当于 @interface People : NSObject { int _age; } - (void)setAge:(int)age; - (int)age; @end - (void)setAge:(int )age { _age = age; } - (int)age{ return _age; } 即:@property
iOS-weak修饰的对象被释放时,weak指针自动被置为nil的实现原理 我们都知道weak指针不会增加引用计数,并在引用对象被回收的时候自动被置为nil。通常用于解决循环引用问题。那么,自动被置为nil内部又是如何实现的呢? 一、weak的实现原理 概括 Runtime维护了一个weak表,用于存储指
目录 1 Swig方案... 2 1.1 下载安装... 2 1.2 使用... 3 2 Djinni方案... 5 2.1 下载和安装... 5 2.2 使用... 6 针对功能复杂的app开发,比较流行的方案一般是用c++开发跨平台的底层SDK供UI层调用。实现一套代
本文章将记录Objective-C中消息传递和转发机制、Method Swizzling的相关资料,如有错误欢迎指出~ Objective-C 本质上是一种基于 C 语言的领域特定语言。C 语言是一门静态语言,其在编译时决定调用哪个函数。而 Objective-C 则是一门动态语言,其在编译时不能决定最终执行时调用哪个函数
在所在目录运行如下命令[ 注意有个点 ] flutter create -i objc . 参数解释: -i 是表示iOS项目开发语言,objc和swift两个选项,其中objc是默认的。 -a 是表示Android项目开发语言,java和kotlin两个选项,其中java是默认的。 当然了create命令还给我们提供了一些其他选项: -t , --
xcode可以进行c++、objective-c混合开发,mm、m后缀为objective-c代码,可以在其中调用cpp后缀的c++类,反过来不行,除非把compile sources as设置为objective-c++才行。怎样可以做到不改compile sources as可以反向调用?下面介绍的一种方法。 // objc // 头文件 @interface Test : NS
在 Objective-C 2.0 中提供了快速枚举的语法,它是我们遍历集合元素的首选方法。它具有以下优点: 比直接使用 NSEnumerator 更高效; 语法非常简洁; 如果集合在遍历的过程中被修改,它会抛出异常; 可以同时执行多个枚举。 一、解析 NSFastEnumeration 协议 在 Objective-C 中,我们要想实现
目录前言runtime是什么三个重要概念一 各主要对象数据结构1 objc_object2 objc_class2.1 cache_t2.2 class_data_bits_t3 isa4 method_t4.1 函数的四要素4.2 types5 一张图表明各数据结构之间的关系二 实例对象、类对象和元类对象1 实例方法调用时是如何查找的2 self和super
objc_msgSend:用于对objc对象发送消息,执行objc的方法。 objc_msgSendSuper:同上一样,这里是调用objc父类对象的方法。 使用以上函数之前需要对它们做函数转换后,方可使用,以下是这些函数的注释 These functions must be cast to an appropriate function pointer type before being ca
当往工程中添加文件时:注意 1.确保该.m文件在其中 2.勾选该文件对应的target 二: 尝试 关闭 或者 修改路径名()Desktop/t/lite/Article 点赞 收藏 分享 文章举报 TheShyclear 发布了85 篇原创文章 · 获赞 18 · 访问量 3万+ 私信
如何正确的hook方法objc_msgSend前言如果希望对 Objective-C 的方法调用进行 log, 一个很好的解决方法就是 hook 方法 objc_msgSend, 当然想到的就是利用 InlinkHook 直接 hook 完事, 然而 objc_msgSend 是一个可变参数函数, 这就有点蛋疼了. objc4-680, 和目前的 objc4-709 没有
题记:在项目不紧张的闲暇时间研究研究提升自己的技术认知. 怎样实现分类增加属性? 在h文件中增加一个 page属性 @property (nonatomic, assign) NSInteger page; 在.m文件中 对于一个属性而言其实就是实现了get和set方法,那么就应该从 get set方法入手,运用runtime机制动态添
一个objc对象的isa的指针指向什么?有什么作用? 指向他的类对象,从而可以找到对象上的方法 详解:下图很好的描述了对象,类,元类之间的关系: 图中实线是 super_class指针,虚线是isa指针。 1.Root class (class)其实就是NSObject,NSObject是没有超类的,所以Root class(class)的superclass指向n
一、介绍 模型转字典,字典转模型,这是开发中最基本的功能。系统类中提供了一个setValuesForKeysWithDictionary方法来实现字典转模型,至于模型转字典,这个就需要使用runtime来实现了。其实字典和模型的互转可以完全使用运行时runtime来实现。典型的第三方有MJExtension和YYModel。现在
dynamic 被@objc dynamic 修饰的内容会具有动态性,比如调用方法会走runtime那一套流程 class Dog: NSObject { @objc dynamic func test1() {} func test2() {} } var d = Dog() d.test1() d.test2() 对应汇编 KVC\KVO Swift支持KVC\KVO的条件 属性所在的
Category是Objective-C 2.0之后添加的语言特性,分类、类别其实都是指的Category。Category的主要作用是为已经存在的类添加方法。 Objective-C 中的 Category 就是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。 分类优点 声
runtime 简称运行时,是系统运行的一种机制,在oc中通过c语言编写一个运行系统库。 对runtime要深入理解,首先需要理解 isa, objc_object, objc_class 对象与类的关系 objc.h : objc_object /// Represents an instance of a class.struct objc_object { Class _Nonnull isa
#ifndef _REWRITER_typedef_TestA#define _REWRITER_typedef_TestAtypedef struct objc_object TestA;typedef struct {} _objc_exc_TestA;#endifstruct TestA_IMPL { struct NSObject_IMPL NSObject_IVARS;};/* @end */// @implementation TestAstruct __TestA__funcitonB
/* 定义协议时候,协议后面最好跟上class delegate的属性最好用weak,用于防止循环引用 */ protocol BuyTicketDelegate : class{ func buyTicket() } class Person22{ weak var delegate:BuyTicketDelegate? func gotoBeiJing() { de
刚才V2ex上问了这么一个问题: http://www.v2ex.com/t/97577#reply7 然后就随手搜了下 stackoverflow 在iOS5的年代是有这么个API: 1 [[UIDevice currentDevice] setOrientation: UIInterfaceOrientationPortrait]; 但是在iOS 6开始,苹果把这个API 私有了。 于是乎,可以
转自:https://www.jianshu.com/p/d4b55dae9a0d 本文主要整理了Runtime的相关知识。对于一个iOS开发者来说,掌握Runtime的重要性早已不言而喻。OC能够作为一门优秀的动态特性语言,在其背后默默工作着的就是Runtime。在网上也看过很多资料,最终我还是希望在一些关键的知识点上能够