Effective Objective-C 2.0 读书笔记—— 方法调配(method swizzling)

TouchSocket TcpService:构建高性能Tcp服务的终极利器 / 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务? 阅读详情

Effective Objective-C 2.0 读书笔记—— 方法调配(method swizzling)

前言

前面我们说到了,我们在调用方法时,实际上就是在调用objc_msgSend这个C语言函数,让OC之中的方法能够被成功解析。那么,就有一个随之而来的问题,我们是否可以在选择子有具体对应方法时,在运行期之中对其进行改变?这个答案是肯定的,这个方法可以让我门不需要源代码,也不需要继承子类来覆写方法就能改变这个类本身的功能,这样子这个新功能就能够在所有的类中的实例中生效,这个方法我们就称之为 方法调配(method swizzling)

IMP

在前面的笔记之中,我提到了IMP其实就是一个函数指针,原型如下:

typedef id (*IMP)(id, SEL, ...)

如果说SEL存储的是方法的具体地址,那么IMP这个指针指向的就是方法的C语言底层实现,我们知道方法名(SEL)是哈希化存储的,可以快速查找对应的 IMP,而不是遍历所有方法,我们只需要查找相同的 SEL 在指向的 IMP列表。

SEL 和 IMP 在 objc_msgSend 中的关系

当我们调用一个方法时,本质上是:

[obj someMethod];  // 实际上是等价于:
objc_msgSend(obj, @selector(someMethod));

执行过程

  1. objc_msgSend 通过 SEL 在类的方法列表中查找方法实现(IMP)。
  2. 找到 IMP 后,直接调用该方法的实现。

如果我们手动查找 IMP 并调用,就可以跳过 objc_msgSend 的方法查找,提高执行效率:

IMP imp = [obj methodForSelector:@selector(someMethod)];
imp(obj, @selector(someMethod));  // 直接调用方法

方法调配

书中拿NSString类举例,NSString类可以相关lowercaseString、uppercaseString、capitalizedString的方法,那么每一个方法都映射在了不一样的IMP之中

image-20250129164440119

OC提供了几个C语言方法,去操作这张NSString类的方法映射表,我们可以在这个表中新增选择子,也可以改变选择子的实现,若经过几次操作就可以变成一下列表

请添加图片描述

在新的映射表中,多了一个名为newSelector的选择子,capitalizedString的实现也变了, 而lowercaseString 与uppercaseString的实现则互换了。上述修改均无须编写子类,只要修改 了“方法表” 的布局,就会反映到程序中所有的NSString实例之上

实现方法交换

想交换方法实 现 ,可用下列函数 :

void method_exchangeImplementations (Method ml, Method m2)

此函数的两个参数表示待交换的两个方法实现,而方法实现则可通过下列函数获得:

Method class_getInstanceMethod (Class aClass, SEL aSelector)

获取方法的 IMP 指针(函数指针)

method_getImplementation(Method method)

还是拿书中的例子,执行下列代码,即可交换前面提到 的l owercaseString 与uppercaseString 方法实现:

void swizzleNSStringMethods(void) {
    Class stringClass = [NSString class];
    
    Method m1 = class_getInstanceMethod(stringClass, @selector(lowercaseString));
    Method m2 = class_getInstanceMethod(stringClass, @selector(uppercaseString));
    
    method_exchangeImplementations(m1, m2);
}

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *testString = @"Hello World!";
    NSLog(@"Original lowercaseString: %@", [testString lowercaseString]);
    NSLog(@"Original uppercaseString: %@", [testString uppercaseString]);

    // 进行方法交换
    swizzleNSStringMethods();

    // 再次调用 lowercaseString 和 uppercaseString
    NSLog(@"After Swizzling lowercaseString: %@", [testString lowercaseString]);
    NSLog(@"After Swizzling uppercaseString: %@", [testString uppercaseString]);
}

我们可以看到,编译器出现以下结果,我们调用了方法交换,使得两个方法的实现方式变交换了

image-20250130155833499

但是我们一般也不用这些方法进行交换,因为这些方法已经被封装的很好了,把两个方法交换再使用,会对程序的可读性造成很大影响,着实是没有必要的多余之举。

按照书里的例子,我们一般是将方法进行修改,即重写子类的方法,例如:

新方法可以添加至NSString的 一个“分类”(category)中:

@interface NSString (E0CMyAdditions)

- (NSString*) eoc_myLowercaseString; 
@end

新方法的实现代码可以这样写:

@implementation NSString (EOCMyAdditions)

- (NSString*) eoc_myLowercaseString (
  NSString *lowercase = [self eoc_myLowercaseString) ;
  NSLog (@"80 >= %@", self, lowercase) ;
 	return lowercase;
}
@end

这个程序看似会造成循环调用的问题,但是由于我们进行了方法调配,所以实际上调用的是lowercaseString的方法,这样子就可以在不重写子类的情况下进行

用于调试程序

示例:调试 viewWillAppear: 方法

在 iOS 开发中,我们可以通过 方法交换 来拦截 UIViewController 的 viewWillAppear: 方法,并在调用时打印日志,从而调试某个界面是否被正确加载。

#import <UIKit/UIKit.h>
#import <objc/runtime.h>

@implementation UIViewController (Debugging)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        // 获取原始的 viewWillAppear: 方法
        Method originalMethod = class_getInstanceMethod([self class], @selector(viewWillAppear:));
        
        // 获取我们自定义的调试方法
        Method debugMethod = class_getInstanceMethod([self class], @selector(debug_viewWillAppear:));

        // 交换方法实现
        method_exchangeImplementations(originalMethod, debugMethod);
    });
}

// 这个方法会替换掉原始的 viewWillAppear:
- (void)debug_viewWillAppear:(BOOL)animated {
    // 先调用原来的 viewWillAppear:(注意这里调用的是 debug_viewWillAppear:,但其实它已经是原来的 viewWillAppear:)
    [self debug_viewWillAppear:animated];
    
    // 打印日志
    NSLog(@"[DEBUG] %@ will appear", NSStringFromClass([self class]));
}

@end

在 +load 方法中执行交换

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method originalMethod = class_getInstanceMethod([self class], @selector(viewWillAppear:));
        Method debugMethod = class_getInstanceMethod([self class], @selector(debug_viewWillAppear:));
        method_exchangeImplementations(originalMethod, debugMethod);
    });
}
  • +load 方法会在类被加载到内存时自动执行,确保方法交换只发生一次。
  • dispatch_once 避免 load 方法被执行多次,防止方法被重复交换。

拦截 viewWillAppear: 方法

- (void)debug_viewWillAppear:(BOOL)animated {
    [self debug_viewWillAppear:animated]; // 其实调用的是原来的 viewWillAppear:
    NSLog(@"[DEBUG] %@ will appear", NSStringFromClass([self class]));
}
  • 因为 method_exchangeImplementations,调用 debug_viewWillAppear: 实际上会执行原来的 viewWillAppear:。
  • 这样,我们在不修改 UIViewController 原始代码的情况下,为所有 ViewController 统一添加了调试日志!

总结

  1. 在运行期,可以向类中新增或替换选择子所对应的方法实现。
  2. 使用另一份实现来替换原有的方法实现,这道工序叫做“方法调配”,开发者常用此 技术向原有实现中添加新功能。
  3. 一般来说,只有调试程序的时候才需要在运行期修改方法实现,这种做法不宜滥用。若是滥用,反而会令代 码变得不易读懂且难于维护。
HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑) 本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。 阅读详情

相关推荐

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 457

iOS面试题库终极指南:一站式掌握iOS开发核心知识点

iOS-InterviewQuestion-collection是一个专注于iOS面试题收集和整理的开源项目,旨在帮助iOS开发者系统性地准备面试。这个项目涵盖了从基础到高级的iOS开发知识体系,包括内存管理、Runtime、Runloop、UIKit、网络、多线程、设计模式等核心领域。无论你是iOS开发新手还是经验丰富的开发者,这个项目都能为你提供全面的面试准备资源。 ## 📚 项目概述与核

gitblog_00695的博客 427

右腿驱动电路设计:从共模干扰原理到生物电采集实战

在生物电信号采集领域,共模干扰是影响测量精度的核心挑战之一,其本质源于环境电磁场通过容性耦合在人体表面产生的感应电流。根据欧姆定律,由于人体组织阻抗的不均衡性,共模电流会在不同测量点产生差异化的压降,从而转化为难以滤除的差分噪声。为解决这一问题,右腿驱动技术应运而生,它通过负反馈原理主动抵消干扰,显著提升系统的共模抑制比。该技术广泛应用于心电图、脑电图等医疗电子设备中,是确保微弱生理信号质量的关键环节。本文结合工程实践,深入剖析了右腿驱动电路中的仪表放大器选型、反馈环路稳定性设计以及PCB布局布线要点,为高

weixin_31476015的博客 440

Objective-C 老项目怎么在 VS Code 里开发?KXApp 的补全、断点与真机调试

这篇讲 Objective-C 老项目怎么在 VS Code 里用 KXApp 开发:纯 OC、OC+Swift 混编、C/C++ 底层代码、CocoaPods 依赖四类工程分别怎么处理补全和索引,断点、条件断点、lldb 控制台和 App 输出怎么看,clangd 冲突怎么解决,以及和 Xcode、Storyboard、Instruments 的分工边界。

2501_91591841的博客 340

Win11 C盘爆满别慌!手把手教你安全迁移AppData和用户文件夹(附一键脚本)

本文针对Win11 C盘空间不足问题,提供了一套安全有效的解决方案。通过深入解析用户目录结构,指导用户利用符号链接和Robocopy工具,将AppData、下载文档等占用大户迁移至其他分区,并附带了自动化脚本,从根本上实现C盘瘦身,同时确保系统稳定和数据安全。

weixin_29231221的博客 2084

微信本地数据解密实战:从AES加密原理到EnMicroMsg.db恢复指南

数据加密是保障信息安全的核心技术,其中对称加密算法AES因其高效可靠,被广泛应用于各类本地数据保护场景。其原理是通过特定密钥对数据进行混淆转换,确保未经授权者无法读取原始内容。在移动应用领域,本地数据库加密对于保护用户隐私、防止数据泄露具有重要价值。微信作为国民级应用,对其本地存储的聊天记录数据库(EnMicroMsg.db)采用了基于设备标识和用户UIN生成的AES-256-CBC加密方案。理解这一机制,不仅有助于在合法合规前提下进行个人数据备份与恢复,也为开发者进行客户端安全分析、兼容工具开发提供了基础

weixin_30764883的博客 565

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 148

【AutoCAD中实现双击文本编辑功能】

例如:以下是官方博客例子浅析先加入相关的头文件和库文件。在AutoCAD中有一个很重要的功能,就是双击图形尺寸或文本后会出现一个文本编辑框,用户可在该编辑框中修改文字。本文介绍了如何使用AcEdInplaceTextEditor来实现该功能。实现cad的消息监听。创建一个消息监听的类并在cad中注册来实现消息监听。主要是监听键盘输入。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了的函数和方法。

我的博客 1148

4G 功能机操作系统选型指南:KaiOS、Mocor、MAUI、PMAOS 的能力边界与验证方法

4G 功能机如何选择操作系统?本文梳理 KaiOS、Mocor、MAUI、PMAOS 四条路线的技术定位与能力边界,从市场认证、应用清单、芯片与 BSP、内存与整机成本、交付维护五个维度建立选型流程,并提供场景决策矩阵和签约前八项验证清单,帮助研发与产品团队区分平台宣称、演示能力与目标机型的实际交付能力。

PMAOS的博客 172

025、Zephyr RTOS设备树覆盖与修改

本文分享了在Zephyr RTOS中使用设备树覆盖(overlay)的实战经验。作者通过一个工业数据采集项目中GPIO无法拉高的调试案例,揭示了设备树覆盖的"叠加"本质而非简单替换。文章详细介绍了覆盖文件的正确编写方式,包括节点引用、pinctrl配置等技巧,并总结了常见陷阱如状态设置不完整、别名冲突等问题。特别强调了条件覆盖的用法和调试方法,最后提出了覆盖文件管理的五项实用原则,强调设备树覆盖是硬件与软件之间的重要契约,需要谨慎对待。全文以实际项目为背景,提供了可操作性强的技术建议。

m0_50546716的博客 33

分析4-20mA检查电路分析

本文介绍了一种工业领域常用的4-20mA电流信号调理电路,可将标准电流信号转换为适合MCU采集的电压信号。电路包含三个关键模块:首先通过10Ω取样电阻将4-20mA电流转换为0.04-0.2V电压;然后采用同向比例运算放大器KTA333-ST5进行信号放大;最后通过二阶有源低通滤波器滤除工业环境中的高频干扰。文章详细分析了各模块的工作原理和参数设计,并以压力传感器和温度变送器为例说明了实际应用中的参数调整方法。该电路具有抗干扰能力强、精度高等特点,适用于工业压力、温度等模拟量信号的采集处理。

qq_37999850的博客 1324

iOS 小组件开发,Windows 上用 KXBuild 加 WidgetKit 扩展 给 App 加 iOS 桌面小组件

iOS 小组件开发用 WidgetKit。这篇在 Windows 上用 KXBuild 的 add-target --type widget 给 SwiftUI 工程加一个桌面小组件扩展:写时间线和主屏小号/中号、锁屏圆形多种尺寸界面,用 App Group 和 App 共享数据,App 里调 WidgetCenter 主动刷新,按 F5 装到 iOS 17+ 的 iPhone 调试,再随 ipa 一起上架。以喝水打卡为例,附 App ID、描述文件准备和小组件不刷新、签名报错的排查。

2501_91600747的博客 175

手把手教你学Simulink--电机电磁兼容与可靠性​场景示例:基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

MHD0815的博客 314

芯参谋(83):AliOS Things_驱动开发指南

本指南针对AliOSThings驱动开发中的核心痛点,系统梳理了从硬件配置到组件交付的全流程。聚焦“初始化顺序”“分级加载”“CSI隔离”“VFS挂载”等关键问题,提供可照搬的八步开发流程、骨架代码与核查清单。通过明确驱动类型选择、组件化管理、板级静态配置(无DTS)及内核态/用户态运行模式,解决“驱动不注册”“open失败”“偶发死机”等典型难题。配套模板与实战案例,确保驱动可复现、可维护、可裁剪,适用于V3.x弹性微内核平台,助力开发者高效完成稳定可靠的外设驱动开发。

qq520131714的专栏 465

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

安卓IOS打包证书

.p12 、 .mobileprovision 、 keystore 相关证书申请

weixin_58431406的博客 267

React Native项目开发(iOS侧为例)

本文基于React Native 0.71+,通过npx react-native init初始化项目后,详细讲解如何使用TypeScript搭建两个页面:入口页(Entrance.tsx)和我的页面(Profile.tsx)。重点介绍了配置tsconfig.json、初始化TypeScript环境、集成React Navigation实现页面跳转,并通过创建共享类型文件(navigation.ts)实现路由类型安全。文章还涵盖依赖安装、iOS构建问题排查、目录结构规范及常见错误解决方案。

D_xw_的博客 225

iOS 推送通知怎么实现,从 APNs p8 密钥到 iOS 真机收到第一条推送

iOS 推送通知要跑通,核心是 App ID 开通 Push Notifications 并重新生成描述文件、签名带上 aps-environment、再用 APNs 的 .p8 密钥签 JWT 把推送发到设备令牌。这篇用 KXBuild 按五步做:开能力、加 entitlements、代码里请求权限拿设备令牌、建 .p8 认证密钥、用一段 Node 脚本或 curl 走 HTTP/2 发测试推送,让 iPhone 弹出第一条通知。附拿不到令牌、APNs 报错码、TestFlight 收不到的排查。

2501_91591841的博客 207

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 205

iOS App 图标、启动屏和多语言搭配 方法,上架前使用KXBuild一次做好 App 图标

上架前,iOS 的 App 图标、启动屏和多语言这三样配不齐,上传时就可能被拦或显示不对。这篇用 KXBuild 一次配好:图标只要一张 1024×1024、不带透明通道的 PNG,在资源目录编辑器里右键就生成全部尺寸,还支持 iOS 18 深色/着色和 Xcode 26 的 .icon;启动屏在 Info.plist 的 UILaunchScreen 填背景色和 Logo;界面文字、App 名称用 .xcstrings 翻译,商店信息再到 App Store Connect 按语言填。附上架前检查清单。

2501_91600889的博客 261

React Native iOS 项目搭建

本文系统梳理了React Native iOS开发的环境检测与项目搭建全流程。强调环境问题占报错70%根因,需优先验证Node/npm、Watchman、Xcode工具链、模拟器运行时等关键项。通过官方CLI初始化项目,配合CocoaPods管理原生依赖,实现从环境验收到首跑成功的闭环。基于React Navigation构建双Tab嵌套导航,结合AsyncStorage实现本地持久化,完成用户列表、详情页、我的页等核心功能。最后提供调试技巧与高频报错解决方案,助力开发者高效落地RN项目。

D_xw_的博客 436

Appuploader 创建 iOS 描述文件详解,Development / Ad Hoc / App Store

搞不清 iOS 描述文件(Provisioning Profile)该选 Development、Ad Hoc 还是 App Store?本文讲清四种类型各装到哪、哪些要绑设备、能不能上架,重点辨析最容易混的 Development 与 Ad Hoc,说明设备或证书变动后为什么要重建、重建后要重新导入签名,并给出不用 Mac 在 Windows/Linux 上用 Appuploader 新建与重建描述文件的实操步骤,附装机"描述文件不匹配"等常见问题排查。

2501_91373349的博客 202

Windows 开发 iOS,Sign in with Apple 苹果登录,KXBuild 真机调试全流程

Sign in with Apple 接入分四步:App ID 开能力并重新生成描述文件,entitlements 加 com.apple.developer.applesignin,用 SignInWithAppleButton 拿 identityToken 交服务端验签,删账号时调 revoke。本文讲清审核指南 4.8 为什么要你提供它、姓名邮箱只给一次、用 user 当主键,并在 Windows 上用 KXBuild 真机测登录,附 1000 报错排查。

2501_91373349的博客 191

iOS 深度链接配置教程,URL Scheme 与 Universal Links,KXBuild 真机验证

深度链接两种:URL Scheme(myapp://)只改 Info.plist 的 CFBundleURLTypes;Universal Links(https://)要开 Associated Domains、在 entitlements 写 applinks 域名、网站放 /.well-known/apple-app-site-association。讲清两者怎么选、onOpenURL 处理代码,在 Windows 上用 KXBuild 装 Debug 包真机验证,附 CDN 缓存和十个不跳转排查。

2501_91600747的博客 251

手机远程控制电脑哪家强?2026年iOS/安卓/鸿蒙横评实测,ToDesk/向日葵谁更流畅

手机远程控制电脑已成刚需,ToDesk凭借全平台覆盖、低延迟、无广告、免费不限速等优势,成为最佳选择。其iOS、安卓、鸿蒙及Mac系统均支持,实测连接快、操作流畅,虚拟键盘、外接键鼠、互动批注等功能体验出色。相较之下,向日葵存在限时踢线、传输慢、广告多等痛点。选购建议:无论用何种手机,首选ToDesk,实现高效便捷的远程办公与协助。

lx08113的博客 256

go消息推送之极光推送 (JPush REST API + SDK,覆盖安卓与iOS)

使用 gorush有个绕不开的问题:国内安卓设备上 FCM 基本不可达,华为、小米、OPPO、vivo 各自为政——此时可用极光推送(JPush)作解决方案。它的思路和前面几家都不一样:App 集成极光 SDK 后拿到统一的 RegistrationID,服务端发一条 REST 请求,极光云端自动把消息路由到 APNs、各家厂商通道或极光自有长连接。这里给出了:一个用纯标准库直接调用极光的;另一个用社区维护的,类型化参数,接口注释与官方文档逐条对应。两个功能相同,可放在一起对比学习。

qq_40467670的博客 151

编译期常量不是 Dart 专有的概念

Dart 中的“编译期常量”指在编译阶段即可确定值的常量,如 const secondsPerHour = 60 * 60。此类常量无需运行时计算,而 final 变量可在运行时初始化,如 final startTime = DateTime.now()。const 要求初始值为编译期常量,不可变;final 不限于编译期,但初始化后不可修改。类似概念见于 C++ constexpr、C# const,Swift let 则更接近 Dart final。

侯仕奇的博客 197

05 · OpenStack的对象存储 Swift——海量静态数据的“无限仓库“

本文系统解析 OpenStack Swift 对象存储,厘清其与块、文件存储的本质区别:面向永久静态数据(如镜像、图片、备份)的长期存储,采用最终一致性模型。核心为 Account→Container→Object 三级结构,容器不支持嵌套,通过对象名前缀模拟目录。依托三类 Ring(Account/Container/Object)实现分布式定位,基于一致性哈希与副本机制保障高可用与无限扩展。实验环节可完成加盘、分区、挂载及 Ring 构建,验证多副本落点。对比华为 OBS、Ceph 等,凸显其在海量非结

路漫漫其修远兮,吾将上下而求索 563

腾讯云国际充值未到账:从汇款附言到入账匹配的排查顺序

腾讯云国际站电汇充值没到账,原因大多不在"钱丢了",而在附言没写账号 ID、金额或币种与订单不符、中转行扣费造成短款、款项挂在待认领状态、重复提交触发风控。本文按从提交到入账的实际链路给出一张排查顺序表,每步附上现象、判断依据和对应动作,并说明工单该怎么写才不用来回三轮。

aolicloud的博客 373
上一篇: Effective Objective-C 2.0 读书笔记—— objc_msgSend
下一篇: Effective Objective-C 2.0 读书笔记—— 消息转发
小鹿撞出了脑震荡
博客等级 码龄3年 1107粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值