UIImageView 知识梳理

24、科技开发实用指南:专利、商标与游戏开发详解 本文详细介绍了科技开发中的关键内容,包括专利和商标的申请要点,以及基于Objective-C实现的Pong游戏开发全过程。涵盖临时专利的优势、商标的品牌保护作用,以及游戏开发中的视图控制器设计、核心逻辑实现和外部配件数据传输处理。同时提供了开发流程总结、注意事项和常见问题解答,为开发者提供实用参考。 阅读详情

1.imageName & imageWithContentsOfFile

 

imageNamed

imageWithContentsOfFile

加载方式区别

从缓存中读取

直接从文件中加载图片

CPU开销

大

低

场景

经常使用的场景

不是经常使用的场景

多个相同 是否重复加载

不会

会

 

2图片显示流程

001 从磁盘拷贝数据到内核缓冲区(系统调用)

002 从内核缓冲区拷贝数据到用户控件(进程所在)

003 生成UIImageView,把图像数据赋值给UIImageView

004 如果图片未解码,解码为位图数据

005 CATransaction 捕获到UIImageView图层树的变化

006 主线程RunLoop在最后的drawing cycle提交CATransaction

      如果数据没有字节对齐,core Animation会再拷贝一份数据进行字节对齐

007 GPU处理位图数据,进行渲染

3.图片解码流程

将PNG JPEG格式图片,显示在图片中的格式是bitmap

需要进行几个专有buffer

Data Buffer :存储在内存中的原始数据 01010101

Image Buffer:存储在内存中的像素点 

Frame buffer:帧缓冲,用于显示到显示器上,存储在VRAM中

解码的时机

图片在被设置到UIImageView.image或者layer.contents中之后,在layer被提交到GPU之前CGImage数据才会解码,这一步发生在主线程中,无可避免。

画布重绘解码 将图片用CGContextDrawImage()绘制到画布上,然后把画布的数据取出来当作图片

+ (CGImageRef)CGImageCreateDecoded:(CGImageRef)cgImage orientation:(CGImagePropertyOrientation)orientation {
    if (!cgImage) {
        return NULL;
    }
    size_t width = CGImageGetWidth(cgImage);
    size_t height = CGImageGetHeight(cgImage);
    if (width == 0 || height == 0) return NULL;
    size_t newWidth;
    size_t newHeight;
    switch (orientation) {
        case kCGImagePropertyOrientationLeft:
        case kCGImagePropertyOrientationLeftMirrored:
        case kCGImagePropertyOrientationRight:
        case kCGImagePropertyOrientationRightMirrored: {
            // These orientation should swap width & height
            newWidth = height;
            newHeight = width;
        }
            break;
        default: {
            newWidth = width;
            newHeight = height;
        }
            break;
    }
    
    BOOL hasAlpha = [self CGImageContainsAlpha:cgImage];
    // iOS prefer BGRA8888 (premultiplied) or BGRX8888 bitmapInfo for screen rendering, which is same as `UIGraphicsBeginImageContext()` or `- [CALayer drawInContext:]`
    // Though you can use any supported bitmapInfo (see: https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-BCIBHHBB ) and let Core Graphics reorder it when you call `CGContextDrawImage`
    // But since our build-in coders use this bitmapInfo, this can have a little performance benefit
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;
    bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;
    CGContextRef context = CGBitmapContextCreate(NULL, newWidth, newHeight, 8, 0, [self colorSpaceGetDeviceRGB], bitmapInfo);
    if (!context) {
        return NULL;
    }
    
    // Apply transform
    CGAffineTransform transform = SDCGContextTransformFromOrientation(orientation, CGSizeMake(newWidth, newHeight));
    CGContextConcatCTM(context, transform);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage); // The rect is bounding box of CGImage, don't swap width & height
    CGImageRef newImageRef = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    
    return newImageRef;
}

 

Cesium实战:5分钟搞定离线地图与地形加载(附避坑指南) 本文详细介绍了Cesium在内网环境下的离线部署实战方案,重点解决了影像与地形数据的本地加载问题。通过逐步指导项目配置、本地瓦片与自定义地形数据的处理,并优化相机控制体验,帮助开发者快速构建安全、高效的三维地球应用,避免常见的401错误与加载失败陷阱。 阅读详情

相关推荐

ensp VRRP+MSTP综合性实验

网络结构拓扑图 实验要求 要求: 1、全网互通,IP地址任意规划,路径最优,无环路。 2、AR1上面有一个loopback口,ip地址为1.1.1.1/24, 要求所有电脑能访问。 3、vlan10通过LSW1访问1.1.1.1,当LSW1出现问题即使 g0/0/1故障亦能通过lsw2访问。 vlan30通过LSW2访问1.1.1.1,当LSW2出现问题即使 g0/0/1故障亦能通过lsw1访问。 4、LSW1为vlan10的主根,vlan30的备根。 LSW2为vlan30的主根,vlan1

qq_45631844的博客 1万+

iOS UIImage的解码时机

UIImage的图片转码时机是在GPU绘制图像时

brycegao321的博客 2779

DSP复习笔记(5)——外部接口模块XINTF

【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习

BerenCamlost的博客 1万+

Objective-C ---UIImageView (梳理整理)

为什么80%的码农都做不了架构师?>>> ...

weixin_34343308的博客 256

Windows Server双机热备实战:用IIS+ARR+NLB搭建高可用Web服务(附避坑指南)

本文详细介绍了在Windows Server环境下,利用IIS、ARR(Application Request Routing)和NLB(Network Load Balancing)构建高可用Web服务的实战方案。通过双机热备架构,实现从网络层到应用层的全面冗余与智能流量分发,并提供了关键的配置步骤、常见避坑指南及性能调优建议,确保企业级Web服务的连续性与可靠性。

weixin_29210759的博客 384

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1075

UIImageView 图片设置没反应?别急,这份排查指南帮你快速找出原因!

iOS开发中UIImageView图片不显示的常见原因及解决方法:1)检查控件是否已添加到视图并设置正确frame/约束;2)确认图片资源已正确导入项目(Assets.xcassets或Copy Bundle Resources);3)注意文件名大小写敏感问题(尤其真机测试);4)避免在init中过早设置图片,网络加载需在主线程更新;5)区分image属性与backgroundImage;6)检查第三方库加载问题及图片RenderAs模式设置。通过逐步排查这些关键点,可快速定位并解决图片显示问题。

Annieblog的博客 381

Linux下开机异常(fsck exited with status code 4)

Linux下开机异常事情是这样的,本来我呢跑着程序听着歌,结果忽然就死机了,我只能强制关机,再次打开系统的时候,就提示这样fsck from util-linux 2.26.2 /dev/sda10 contains a file system with errors, check forced. /dev/sda10: Inodes that were part of a corrupted pr

芳草碧连天 2万+

iOS 性能优化知识梳理

iOS 性能优化知识梳理 1、概述 在性能优化中,最具参考的属性是FPS(Frames Per Second),其实就是屏幕刷新频率。苹果推荐iPhone的刷新频率是每秒60次,即每秒钟刷新屏幕60次。该属性在静态页面值为0,不具有参考价值,在动画或者滑动的时候,FPS才具有参考价值,FPS的值大小反应页面的流畅程度,当低于45时页面表现得比较卡顿。 2、图层混合和检测 图层混合 每一个layer是一个纹理,所有的纹理都以某种方式堆叠在其顶部。一个屏幕像素点,GPU需要算出怎么混合这些纹理来获得像素

掰湘果的博客 1619

[Dify实战] 在 Dify 官网环境使用 File Translator 插件实现 Office 文档翻译(支持 DOCX/XLSX/PPTX)

摘要:Dify平台的FileTranslator插件可实现Office文档一键翻译,保留原格式和结构。该插件支持Word、Excel、PPT等文件格式,无需额外密钥,直接复用Dify配置的大模型。安装后,用户可在Workflow中调用插件,设置目标语言等参数完成翻译。输出文件自动命名,保留原格式。适用于跨国协作、海外营销等场景,显著提升多语言办公效率。该插件简化了文档翻译流程,是企业用户和开发者的实用工具。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 544

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 370

SDWebImage源代码梳理5#作者动机、修改目录、改变继承关系

作者在早期的readme中写到他的动机,当他刚开始写iOS的应用程序的时候,在UITbaleView上设置从web拿图片,苹果没有提供API。 作者当时搜索了很多的资料,大多数都是使用的NSURLConnection来实现的,这虽然能够工作,但是响应速度还是很慢,于是经过尝试,发现NSOperation来处理非常的快速,不会卡顿。 使用用户缓存目录而不是ducment目录,以防止缓存在iTunes中来回同步。 NSArray *paths = NSSearchPathForDirectoriesIn

run_in_road的博客 202

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

http://www.cierobot.com 4095

UITableView知识梳理须知—(一)

1、UITableView掌握 1> 设置UITableView的dataSource、delegate 2> UITableView多组数据和单组数据的展示 3> UITableViewCell的常见属性 4> UITableView的性能优化(cell的循环利用) 5> ...

weixin_30577801的博客 143

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 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")

TableView知识点梳理__一

设置cell的数据     cell.textLabel.text = hero.name;     cell.detailTextLabel.text = hero.intro;     cell.imageView.image = [UIImage imageNamed:hero.icon]; 设置cell右边指示器的类型    if (indexPath.row % 2 ==

Kiven's Program Space 522

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SDWebImage框架梳理以及下载缓存的梳理和运用

很幸运看到这篇文章,作者对SDWebImage框架内部实现讲解的非常详细 来自: http://www.cnblogs.com/Mike-zh/p/5204240.html 本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWe

影、、铭的博客 1348

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

点击图片放大功能,swift实现

近期开始全面转入swift,由于swift和cocoa框架结合的资料网上很少,所以只能慢慢摸索。这里,对手头上的一个标准照片拍照app中使用的点击图片放大功能做一个介绍。 点击图片放大,在网上有很多例子,都是objc写的,调用的api基本上一样,只是实现时要根据具体情况来梳理。本功能中的图片在一个UIImageView中,这个UIImageView在一个UITableViewCell中,UITa

GerJeffrey47959633的专栏 6642

开发过程中小的知识点梳理(三)

1.通过NSURL获取的图片->NSData->UIImage并进行压缩UIImage *image = nil; NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:weakSelf.shareInfoModel.image]]; image = [UIImage imageWithData:imageDat

FISHBALL1的博客 369

iOS: share项目难点梳理

有一个需要注意的点,就是我们把滚动视图的tableView的第一个cell中, 在调试的过程中, 会发现当我们在滑动tableView的时候, 第一个cell中的定时器会暂停, 然后当停止滑动的时候, 视图会连续翻页,这里涉及到了RootLoop 与 Mode 的知识, 笔者还不太了解, 解决方法就是在创建定时器的时候加上下面这段代码。定义协议, 在列表页要实现协议方法。

for_ever_love__的博客 180

【OC梳理】自动布局

自动布局基础篇 关于自动布局的基本使用,参考网上的文章即可,如: iOS开发-自动布局篇:史上最牛的自动布局教学! 自动布局进阶篇 抗拉伸与抗压缩 相信许多比较少使用自动布局的同学对下面的参数都感觉比较头疼: 其实不难,请往下看: #####Content Hugging Priority : 抗拉伸优先级 最常见的情况是两个label并排放置,并设置水平间距: 报错了?莫慌,当两个label...

weixin_34100227的博客 379

OC/Swift 知识 UIButton

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。 属性 属性 注释 frame 约束 showsTouchWhenHighlighted 点击数是闪光效果会被前景图片盖住中间部分 titleLabel.font 设置文字大小 enabled 隐藏按键 titleLabel.shadowOffset

weixin_38716347的博客 442

Objective-C --- - UITableView 三 自定义cell(梳理总结)

为什么80%的码农都做不了架构师?>>> ...

weixin_33984032的博客 218

SDWebImage源代码梳理4#介绍现有代码的几种用法

用法示例: BJCAImageView作为UIImageView的替代 最常见的用法是和UITableView的结合使用: - 在Interface Builder中将UIImageView作为UITableViewCell的子视图; - 在标识面板中,将类名设置成BJCAWebImageView; - 从bundle中设置一个图片作为占位图; - 在tableview:cellForRowAtIndexPath:方法中,把要下载图片的url通过调用setImageWithURL方法传进去, 所

run_in_road的博客 157

通读SDWebImage①--总体梳理、下载和缓存

本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManager:按需下载->完成缓存->缓存管理等一系列完整的流...

weixin_34061042的博客 265
上一篇: NSOperationQueue
下一篇: UIView 的绘制流程
Coding_Physical
博客等级 码龄12年 160粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值