IOS LOG日志工具

iOS小技能:【设备日志查看工具】syslog、deviceconsole和socat(syslogd to /var/log/syslog) iOS设备日志查看工具syslog和socat安装syslog在cydia搜索syslogd to /var/log/syslog安装即可syslog用法syslog是把系统日志写入到/var/log/syslog文件里,用法很简单,执行tail -f /var/log/syslog就能看到了 如果需要过滤某一应用的日志,只需加上grep即可,比如过滤微信tail -f /var/log/sysl 阅读详情

开发中,日志输出是非常重要的,可以帮助开发者调试并查看重要数据信息,知道程序运行情况或有没有符合预期结果。

但日常开发中,开发者并不是一直都希望日志输出在运行过程中输出相关数据信息(避免数据信息被泄漏),因此需要统一到一个工具类中进行管理,并且有开关控制(方便开发中控制进行日志输出)。

哈哈~好啦!相信这个工具类相对简单,各位都知道怎么开发的,在这里不多说啦~

LogUtil.h

#import <Foundation/Foundation.h>
#define TAG "LOGMSG"

#define LogUtil(format,...) do{if([LogUtil LOG_DEBUG]){NSLog((@"[%s]" format), TAG, ##__VA_ARGS__);} else{}} while (0);

@interface LogUtil : NSObject

+(void)debug:(BOOL) isDebug;

+(BOOL)LOG_DEBUG;

@end

LogUtil.m

#import <Foundation/Foundation.h>
#import "LogUtil.h"

// 是否开启debug模式
static BOOL logDebug;

@implementation LogUtil

+ (void)debug:(BOOL)isDebug{
    logDebug = isDebug;
}

+ (BOOL)LOG_DEBUG{
    return logDebug;
}

@end

调用方法(用法于NSLog一样):LogUtil(@"...",...)

传感器校准与标定:传感器的灵敏度校准_(11).常见传感器的灵敏度校准方法 线性校准:适用于传感器输出与输入之间存在线性关系的情况。通过收集数据并使用最小二乘法拟合线性方程,可以确定斜率和截距,从而实现校准。非线性校准:适用于传感器输出与输入之间存在非线性关系的情况。通过收集数据并使用非线性拟合方法(如最小二乘法),可以确定多项式或其他非线性方程的参数,从而实现校准。温度补偿校准:适用于传感器在不同温度下输出特性变化的情况。通过收集不同温度下的数据并使用温度补偿方程,可以提高传感器在不同温度下的测量精度。其他校准方法。 阅读详情

相关推荐

Keil开发中CMSIS Driver API缺失问题的排查与解决

本文详细解析Keil开发中CMSIS Driver API缺失问题的根源与解决方案。针对版本不匹配、安装不完整等常见原因,提供在线与离线安装的对比及详细排查步骤,重点涵盖版本兼容性分析与项目配置验证,帮助开发者彻底解决API缺失错误并预防问题复发。

rust6ferris的博客 551

IOS开发基础知识--碎片11

1:AFNetwork判断网络状态 #import “AFNetworkActivityIndicatorManager.h" - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //网络 [[AF...

weixin_34318326的博客 143

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 757

如何在iOS系统抓取log(2025年1月17日已更新)

因为作者目前工作领域和苹果智能家居有关,然后发现一些bug其实是applesdk原生code的问题,所以需要给apple提radar单,就需要抓ios端Log充当证据给apple看,其实ios抓log非常简单,大家感兴趣可以学习下哦使用 Sysdiagnose 对 iOS 或 iPadOS 进行故障排除在排除故障或向 AppleCare 报告之前,你可以使用 sysdiagnose 研究一般 iOS 和 iPadOS 问题。

天天的博客 6463

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8269

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 255

【源码】iOS日志管理(一)------日志框架CocoaLumberjack

如何开始使用Lumberjack框架 项目导入CocoaLumberjack 在pod文件中加入 #日志 pod 'CocoaLumberjack' 更新pod install 完成 开始 三步开始使用CocoaLumberjack框架: 1.将Lumberjack文件添加到你的项目中; 2.配置框架; 3.将NSLog指令转换为使用Lumb...

a524389222的博客 347

炼丹-Pyecharts: JupyterLab无法render_notebook

炼丹-Pyecharts: JupyterLab无法render_notebook问题描述Jupyter-Lab 环境下render_notebook显示空白 问题描述Jupyter-Lab 环境下render_notebook显示空白 首先需要使用pyecharts自带的config来申明一下使用pyecharts的运行环境 from pyecharts.globals import Curre...

MichaelZzzzz的博客 4689

提升iOS开发效率:如何正确使用日志、埋点和断言

在 iOS 开发中,日志、埋点和断言是三种强有力的工具,它们各自扮演着重要角色。日志通过记录和追踪应用运行时的信息,帮助开发者调试和分析问题;埋点通过收集用户行为数据,为产品优化和用户体验提升提供了宝贵的依据;断言则通过验证代码假设,确保程序在开发阶段的正确性和稳定性。通过合理地使用这三种工具,开发者可以显著提高开发效率,减少错误发生的概率,提升应用的质量和用户满意度。在日常开发中,我们应根据具体场景和需求,选择合适的工具进行应用,从而构建出更加可靠和高效的 iOS 应用。

weixin_39339407的博客 1094

基于C#的工业机器人上位机控制程序开发(搭配松下PLC+MC协议)

基于C#的工业机器人上位机控制程序开发,核心是上位机与松下PLC的MC协议通信和机器人控制的安全逻辑,而不是单纯的界面编写。在工控现场,程序的稳定性和安全性永远是第一位的——比如解耦通信逻辑、处理跨线程问题、添加安全互锁、记录操作日志,这些都是保证产线稳定运行的关键。新手在学习时,建议先跟着步骤搭建好环境,跑通基础的PLC通信和机器人控制功能,再逐步尝试进阶优化。数据模型化、通信封装化、逻辑模块化、UI解耦化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1240

UDS19 03 和19 04服务--答疑

UDS 1903服务(reportDTCSnapshotIdentification)用于获取ECU中存储的故障码快照标识信息。该服务返回DTC编号及对应的快照记录编号,为后续使用1904服务读取详细快照数据提供依据。请求报文为"1903",响应报文格式为"5903"后接DTC编号和记录编号列表。该服务需在非默认会话模式下执行,且清除诊断信息会删除相关快照记录。1903服务是读取DTC快照数据的基础步骤,可帮助确定ECU中存储的故障快照情况。

汽车软件开发 458

常用工具汇总 Utils

File 文件工具类 Log 日志工具类

villen_t的博客 4677

FastGPT智能体开发:FastGPT OpenAPI 知识库接口

FastGPT OpenAPI 知识库接口

王国平的博客 323

iOS轻量分组日志工具 Log4OC

OC分级日志工具,支持4种日志级别,提供两种持久化方案 源码地址: github.com/FinderTiwk/… 使用 #import "Log4OC.h" //DEBUGLog(建议开发调试使用) DEBUGLog(@"这是一个DEBUG级别日志"); DEBUGLog(@"FinderTiwk", @"这是一个带作者的的DEBUG级别日志"); ...

weixin_33775572的博客 442

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

iOS及时log日志查看工具 (iConsole)

github下载地址:https://github.com/nicklockwood/iConsole 偶然看到的一个iOS及时log日志查看工具,通过该工具,我们可以在任何想看日志的时候,通过手势呼出log日志页,查看app的crash信息或者其他信息。另外,也可以通过查看代码的实现方式,学习在window中,响应手势,这样不管我们进入什么页面,都能呼出iConsole的页面。 希望通过此工...

weixin_30399871的博客 374

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

oslog:iOS设备上实时显示os_log信息

oslog:iOS设备上实时显示os_log信息 项目介绍 在iOS开发过程中,日志调试是一个非常重要的环节。oslog,一个开源的命令行工具,可以帮助开发者直接在iOS设备上查看os_log的流信息或活动。它的出现极大地简化了iOS设备上的日志查看过程,提高了开发效率。 项目技术分析 oslog基于os_log的命令行工具实现,它通过解析命令行参数,调用iOS系统API获取日志信息,并在设备上实...

gitblog_00899的博客 851

蓝牙模块HM-10手册

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

【iOS开发】iOS10 Log调试小工具

一个解决iOS10在发布环境下无法查看调试log的小工具 出发点 由于iOS10系统,在发布环境下(打成ipa包安装测试或者发布之后从App Store下载安装的包),使用Xcode已经无法查看我们自己打印的log。所以就做了一个小工具,查看log,便于调试。 楼主的需求是,在安装了APP之后查看log,验证程序是否正常运行。除了在调试的时候用到,在线上包出问题之后,也能通过查看log来定位问题。...

weixin_33951761的博客 273

iOS10 Log调试小工具

出发点由于iOS10系统,在发布环境下(打成ipa包安装测试或者发布之后从App Store下载安装的包),使用Xcode已经无法查看我们自己打印的log。所以就做了一个小工具,查看log,便于调试。楼主的需求是,在安装了APP之后查看log,验证程序是否正常运行。除了在调试的时候用到,在线上包出问题之后,也能通过查看log来定位问题。效果楼主将该工具分成了3种模式不显示lo...

weixin_34327223的博客 210

SULogger:iOS日志可视化工具

前言 debug对于咋们程序员来说家常便饭,但有时候我们会遇到一种情况:开发某个功能时,需要在某个特定场景下进行调试,而这个场景并没有MacBook来进行连接debug,偏偏我们需要获得调试时的一些信息,怎么办?方法有很多,这里提供一个轻量级工具SULogger来实时显示Log日志在手机屏幕上。 SULogger是什么 用法简单的iOS真机调试实时可视化显示Log日志工具项目主页:https...

weixin_33816300的博客 164

ios Crash Log 分析汇总

ios Crash Log 分析汇总 方法一: 1.xcode 有自带的symbolicatecrash,可以将.crash文件中的16进制地址转换成可读的函数地址。 symbolicatecrash位于: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Dev

redooder的专栏 627

ios/安卓脚本开发辅助工具按键精灵Log.Open日志功能,调试效率翻倍秘籍

摘要:按键精灵的Log.Open命令能自动记录脚本运行日志,只需在脚本开头添加该命令即可开启记录功能。该命令支持自定义日志文件名和保存行数(iOS版),默认以系统时间命名并存储在log目录。开启后会自动记录TracePrint输出内容,帮助开发者通过带时间戳的日志快速定位脚本问题,大幅提升调试效率。语法简单,新手也能轻松上手,是脚本开发的实用调试工具。

ii_best的博客 529

iOS苹果审核被拒反馈的崩溃日志txt解读(转)

iOS苹果审核被拒反馈的崩溃日志txt解读(转) 今天项目被拒了,原因如下: APP崩溃。。。emmm下边的两个txt就很有意思了 打开之后 。。。。。看不懂。。。 还好Xcode可以给我们解析一波: 首先 然后按照如下路径: /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash 找到这个东西 找到之后我们在桌面建一个文件夹,

xiaoxiaoz921的博客 912

探索iOS调试新境界:Log Guru深度解析与推荐

探索iOS调试新境界:Log Guru深度解析与推荐 在iOS开发的世界里,每个开发者都曾面对过应用无法安装到设备上的难题。那些看似无解的错误代码,往往让人一头雾水。今天,我们为您带来一款专为解决这一痛点设计的神器——Log Guru,它让问题诊断变得前所未有的简单和高效。 项目介绍 Log Guru 是一款针对Mac OS 10.9及以上版本的开源工具,旨在帮助iOS开发者轻松查看并解决设备上遇...

gitblog_00245的博客 498

andriod和ios抓取log

andriod: adb logcat > log.txt ios idevicesyslog >> iphone.log &

筱 777

[iOS 开发]可在app中显示的控制台框架GHConsole

GHConsole 简单、便捷的将控制台打印的内容显示到你的app上不起眼的地方,可通过双击全屏显示log日志。对于开发过程测试过程中的小伙伴查看log日志,检查后台接口提供了一种更方便、无线的方式。 安装 只需将GHConsole文件夹拖入你的项目中,或者使用CocoaPods集成即可。 CocoaPods 你可以在你的 Podfile文件中添加下面的代码,安装pod文件即可: platfor...

weixin_33816946的博客 461

抓取手机crash log(iOS+Android)

抓取手机crash log(iOS+Android) iOS抓取log 1. Mac电脑 1. 方法一:查看手机端日志(只可看到已发生crash日志,不受电脑的限制) 直接查看手机系统设置->隐私->分析与改进,即可查看发生过crash的日志,通常,崩溃日志格式包含程序包名,时间以及后缀ips或者beta.点击进去,右上角点击分享可以各种方式分享出去(未查到与iOS版本有关) 2. 方法二:使用控制台查看手机端实时日志(需要先连接再测试,才可抓取有效的日志) 1. Mac电脑直接在系统软件里其他

qq_43311363的博客 6042
上一篇: IOS AES加密/解密
下一篇: Android 短信验证码输入框
KingToAce
博客等级 码龄10年 9粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值