-
WKWebView(2)
参考:WKWebView进阶使用总结 - JS交互(一) 参考:超详细 WKWebView 开发和使用经验 参考:iOS学习笔记 — WKWebView的使用 参考:WKWebview使用攻略目录 关键类介绍 native 和 js 通讯 场景总结关键类介绍一、WKWebViewConfigurationWKWebViewConfiguration 是用于配置 WKWebView 实例的类,允许你在创建 WKWebView 对象时设置一些选项和属性,以满足特定的需求。 ...…
-
WKWebView(1)
参考:WKWebView进阶使用总结 - JS交互(一) 参考:超详细 WKWebView 开发和使用经验 参考:iOS学习笔记 — WKWebView的使用 参考:WKWebview使用攻略目录 介绍 常规使用 两个协议介绍 参考文章:iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题一、什么是WKWebViewWKWebView 是在iOS中用于加载和显示Web内容的一个组件,它提供了一种在你的应用程序中集成Web浏览器功能的方式。理解 WKWeb...…
-
LLDB
目录 格式相关 寄存器相关 内存相关 express p po 命令 单步调试指令格式相关1、格式 x: 16进制d: 10进制f: 浮点2、字节大小 b: Byte 1字节h: half word 2字节w: word 4字节g: giant word 8字节3、举例 memory read/4xg 内存地址 或者 x/4xg 内存地址 读取内存地址中的内容 分4组打印 格式是16进制 每组8个字...…
-
Runtime(十):应用举例
目录 修改textField的占位文字 字典转模型 自动归档解档 交换方法实现 利用消息转发机制,解决方法找不到的异常问题修改textField的占位文字- (void)viewDidLoad { [super viewDidLoad]; UITextField * textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 100, 300, 40)]; textField.placeho...…
-
Runtime(九):类对象信息获取封装
目录 封装 调用封装因为是类对象的信息,我们给NSObject添加一个分类NSObject+classInfo.h#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface NSObject (classInfo)/// 打印类对象遵守的协议+(void)printProtocolNames;/// 打印类对象的成员变量+ (void)printIvarNames;/// 打印类对象的属性信息+ (v...…
-
Runtime(八):API
目录 类 成员变量 属性 方法 具体应用类@implementation ViewControllervoid run(id self,SEL _cmd){ printf("run\n");}-(void)run{ NSLog(@"run");}- (void)viewDidLoad { [super viewDidLoad]; Person * person = [[Person alloc] init]; //获取isa指向的类 ...…
-
Runtime(七):cls剖析
目录 问题抛出 问题解析问题抛出先来看段代码Person.hNS_ASSUME_NONNULL_BEGIN@interface Person : NSObject@property (nonatomic, strong) NSString * name;-(void)print;@endNS_ASSUME_NONNULL_ENDPerson.m#import "Person.h"@implementation Person-(void)print{ NSLog(@"my name...…
-
Runtime(六):class相关函数源码
目录 class函数 superclass函数 isMemberOfClass函数 isKindOfClass函数class函数先看下源码实现- (Class)class { return object_getClass(self);}+ (Class)class { return self;}对象方法调用时通过object_getClass函数返回的是类对象。类方法调用时直接返回self,即将自身返回也就是类对象。 所以不管对象方法class还是类方法clas...…
-
Runtime(五):super详解
目录 super 经典示例super看段代码#import "Student.h"@implementation Student-(void)test{ [super test];}@end通过指令:xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc Student.m并精简代码Student.cpp文件struct __rw_objc_super { struct objc_object *object; stru...…
-
Runtime(四):@synthesize与@dynamic
目录 @property @synthesize @dynamic@property在说这两个关键字之前我们先来看下@property关键字创建一个Person类Person.h文件@interface Person : NSObject;@property (nonatomic, assign) int age;@endPerson.m文件#import "Person.h"@implementation Person@end通过指令xcrun -sdk iphoneos clan...…
-
Runtime(三):消息机制
目录 objc_msgSend 消息发送 动态方法解析 消息转发objc_msgSend看下源码#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person * person = [[Person alloc] init]; [person test]; ...…
-
Runtime(二):Class详解
目录 Class的数据结构 Class的数据查看Class的数据结构一、Class的结构二、class_rw_tclass_rw_t里面的 methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容,分类的内容。三、class_ro_tclass_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的包含了类的初始内容。四、method_tmethod_t 是对方法/...…
-
Runtime(一):isa详解
目录 runtime介绍 isa的数据结构 isa的数据查看runtime介绍一、Objective-C是一门动态性比较强的编程语言,跟C/C++等语言有着很大的不同。编程语言都要经过 编码->预编译->编译->链接->运行,几个阶段,C/C++在运行中的实际结果与编译阶段基本相同,而OC可以在运行过程中做许多事情。 OC的动态性表现在如下几个方面: 1、编码阶段调用test方法,实际运行时可能调用的test2方法或者其他类对象的方法。(方法交...…
-
Blocks(五)
目录 循环引用循环引用常见的循环引用的场景@interface Person : NSObject;@property (nonatomic, copy) void(^blk)(void);@endint main(int argc, char * argv[]) { @autoreleasepool { Person * person = [[Person alloc] init]; person.blk = ^{ ...…
-
Blocks(四)
目录 __block修饰符 Block的内存管理 forwarding指针__block修饰符一、为什么在Block内不能修改变量的值typedef void(^blk)(void);int main(int argc, char * argv[]) { @autoreleasepool { int age = 10; Person * person = [[Person alloc] init]; blk b=^(){ ...…
-
Blocks(三)
目录 Block的类型 Block的copy Block访问对象类型的auto变量Block的类型Block的本质是OC对象,那么我们通过下面代码看下它的类及继承关系void(^blk)(void)= ^(void){ };NSLog(@"[blk class]= %@",[blk class]);NSLog(@"[[blk class] superclass]= %@",[[blk class] superclass]);NSLog(@"[[[blk class] super...…
-
Blocks(二)
目录 Block的本质 带参数的Block的本质 局部变量捕获 全局变量访问 Block的底层结构图Block的本质针对以下代码,我们来窥探下block的本质int main(int argc, char * argv[]) { @autoreleasepool { void(^blk)(void)= ^(void){ printf("Block\n"); }; blk(); } r...…
-
Blocks(一)
目录 Blocks概要 Blocks模式Blocks概要带有自动变量(局部变量)的匿名函数。 匿名函数 自动变量Blocks模式一、Block语法完整形式的Block语法与一般的C语言函数定义相比,仅有两点不同。 (1)没有函数名 (2)带有“^”符号语法格式如下: ^ 返回值类型 参数列表 表达式^int(int a, int b){ NSLog(@"a+b=%d",a+b); return a+b;};//block的调用int result = ^int(in...…
-
自动引用计数(测试)
目录 引用计数-代码测试引用计数-代码测试- (void)viewDidLoad { [super viewDidLoad]; [self referencCountTest1]; [self referencCountTest2]; [self referencCountTest3]; [self referencCountTest4]; [self referencCountTest5]; [self ...…
-
自动引用计数(二)
目录 ARC规则 ARC的实现ARC规则一、概要二、内存管理的思考方式引用计数式内存管理的思考方式就是思考ARC所引起的变化。 自己生成的对象,自己所持有 非自己生成的对象,自己也能持有 不再需要自己持有的对象时释放 无法释放非自己持有的对象三、所有权修饰符所谓对象类型就是指向NSObject这样的Objective-C类的指针,例如NSObject * ; id类型用于隐藏对象类型的类名部分,相当于C语言中常用的 void * ; ARC有效时,id类型和对象类型,必须附加...…