ios开发xcode4.4(ios6)的一些新特性

Xcode26新特性与iOS26适配指南 Xcode 26 作为苹果适配 iOS 26、macOS 15 等新一代系统的开发工具,在开发效率、AI 赋能、跨平台协同及性能优化上有显著升级;iOS 26 则带来了全新系统能力与合规要求,开发者需重点关注适配要点。 阅读详情

方法顺序

  如果有以下代码:

01
02
03
04
05
06
07
08
09
10
11
12
13
@interface SongPlayer : NSObject
- ( void )playSong:(Song *)song;
@end
@implementation SongPlayer
- ( void )playSong:(Song *)song
{
NSError *error;
[self startAudio:&error];
...
}
- ( void )startAudio:(NSError **)error
{ ... }
@end


  在早一些的编译环境中,上面的代码会在[self startAudio:&error]处出现一个实例方法未找到的警告。由于编译顺序,编译器无法得知在-playSong:方法之后还有一个-startAudio:,因此给出警告。以前的解决方案有两种:要么将-startAudio:的实现移到-playSong:的上方,要么在类别中声明-startAudio:(顺便说一句..把-startAudio:直接拿到.h文件中是完全错误的做法,因为这个方法不应该是public的)。前者破坏.m文件的结构打乱了方法排列的顺序,导致以后维护麻烦;后者要写额外的不必要代码,使.m文件变长。其实两种方法都不是很好的解决方案。

  现在不需要再头疼这个问题了,LLVM中加入了新特性,现在直接使用上面的代码,不需要做额外处理也可以避免警告了。新编译器改变了以往顺序编译的行为,改为先对方法申明进行扫描,然后在对方法具体实现进行编译。这样,在同一实现文件中,无论方法写在哪里,编译器都可以在对方法实现进行编译前知道所有方法的名称,从而避免了警告。

枚举改进

  从Xcode4.4开始,有更好的枚举的写法了:

1
2
3
4
5
6
7
8
typedef enum NSNumberFormatterStyle : NSUInteger {
NSNumberFormatterNoStyle,
NSNumberFormatterDecimalStyle,
NSNumberFormatterCurrencyStyle,
NSNumberFormatterPercentStyle,
NSNumberFormatterScientificStyle,
NSNumberFormatterSpellOutStyle
} NSNumberFormatterStyle;

  在列出枚举列表的同时绑定了枚举类型为NSUInteger,相比起以前的直接枚举和先枚举再绑定类型好处是方便编译器给出更准确的警告。个人觉得对于一般开发者用处并不是特别大,因为往往并不会涉及到很复杂的枚举,用以前的枚举申明方法也不至于就搞混。所以习惯用哪种枚举方式还是接着用就好了..不过如果有条件或者还没有形成自己的习惯或者要开新工程的话,还是尝试一下这种新方法比较好,因为相对来说要严格一些。

属性自动绑定

  人人都爱用property,这是毋庸置疑的。但是写property的时候一般都要对应写实例变量和相应的synthesis,这实在是一件让人高兴不起来的事情。Apple之前做了一些努力,至少把必须写实例变量的要求去掉了。在synthesis中等号后面的值即为实力变量名。现在Apple更进一步,给我们带来了非常好的消息:以后不用写synthesis了!Xcode 4.4之后,synthesis现在会对应property自动生成。

  默认行为下,对于属性foo,编译器会自动在实现文件中为开发者补全synthesis,就好像你写了@synthesis foo = _foo;一样。默认的实例变量以下划线开始,然后接属性名。如果自己有写synthesis的话,将以开发者自己写的synthesis为准,比如只写了@synthesis foo;那么实例变量名就是foo。如果没有synthesis,而自己又实现了-foo以及-setFoo:的话,该property将不会对应实例变量。而如果只实现了getter或者setter中的一个的话,另外的方法会自动帮助生成(即使没有写synthesis,当然readonly的property另说)。

  对于写了@dynamic的实现,所有的对应的synthesis都将不生效(即使没有写synthesis,这是runtime的必然..),可以理解为写了dynamic的话setter和getter就一定是运行时确定的。

  总结一下,新的属性绑定规则如下:

1.除非开发者在实现文件中提供getter或setter,否则将自动生成
2.除非开发者同时提供getter和setter,否则将自动生成实例变量
3.只要写了synthesis,无论有没有跟实例变量名,都将生成实例变量dynamic优先级高于synthesis

简写

  OC的语法一直被认为比较麻烦,绝大多数的消息发送都带有很长的函数名。其实这是一把双刃剑,好的方面,它使得代码相当容易阅读,因为几乎所有的方法都是以完整的英语进行描述的,而且如果遵守命名规则的话,参数类型和方法作用也一清二楚,但是不好的方面,它使得coding的时候要多不少不必要的键盘敲击,降低了开发效率。Apple意识到了这一点,在新的LLVM中引入了一系列列规则来简化OC。经过简化后,以降低部分可读性为代价,换来了开发时候稍微快速一些,可以说比较符合现在短开发周期的需要。简化后的OC代码的样子向Perl或者Python这样的快速开发语言靠近了一步,至于实际用起来好不好使,就还是仁智各异了…至少我个人对于某些简写不是特别喜欢..大概是因为看到简写的代码还没有形成直觉,总要反应一会儿才能知道这是啥…

NSNumber

  所有的[NSNumber numberWith…:]方法都可以简写了:

[NSNumber numberWithChar:‘X’] 简写为 @‘X’;
[NSNumber numberWithInt:12345] 简写为 @12345
[NSNumber numberWithUnsignedLong:12345ul] 简写为 @12345ul
[NSNumber numberWithLongLong:12345ll] 简写为 @12345ll
[NSNumber numberWithFloat:123.45f] 简写为 @123.45f
[NSNumber numberWithDouble:123.45] 简写为 @123.45
[NSNumber numberWithBool:YES] 简写为 @YES
  嗯…方便很多啊~以前最讨厌的就是数字放Array里还要封装成NSNumber了…现在的话直接用@开头接数字,可以简化不少。

NSArray

  部分NSArray方法得到了简化:
[NSArray array] 简写为 @[]
[NSArray arrayWithObject:a] 简写为 @[ a ]
[NSArray arrayWithObjects:a, b, c, nil] 简写为 @[ a, b, c ]
  可以理解为@符号就表示NS对象(和NSString的@号一样),然后接了一个在很多其他语言中常见的方括号[]来表示数组。实际上在我们使用简写时,编译器会将其自动翻译补全为我们常见的代码。比如对于@[ a, b, c ],实际编译时的代码是

// compiler generates: id objects[] = { a, b, c }; NSUInteger count = sizeof(objects)/ sizeof(id); array = [NSArray arrayWithObjects:objects count:count];
  需要特别注意,要是a,b,c中有nil的话,在生成NSArray时会抛出异常,而不是像[NSArray arrayWithObjects:a, b, c, nil]那样形成一个不完整的NSArray。其实这是很好的特性,避免了难以查找的bug的存在。

NSDictionary

  既然数组都简化了,字典也没跑儿,还是和Perl啊Python啊Ruby啊很相似,意料之中的写法:

[NSDictionary dictionary] 简写为 @{}
[NSDictionary dictionaryWithObject:o1 forKey:k1] 简写为 @{ k1 : o1 }
[NSDictionary dictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil] 简写为 @{ k1 : o1, k2 : o2, k3 : o3 }
  和数组类似,当写下@{ k1 : o1, k2 : o2, k3 : o3 }时,实际的代码会是

// compiler generates: id objects[] = { o1, o2, o3 }; id keys[] = { k1, k2, k3 }; NSUInteger count = sizeof(objects) / sizeof(id); dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count];

Mutable版本和静态版本

  上面所生成的版本都是不可变的,想得到可变版本的话,可以对其发送-mutableCopy消息以生成一份可变的拷贝。比如

NSMutableArray *mutablePlanets = [@[ @"Mercury", @"Venus", @"Earth", @"Mars", @"Jupiter", @"Saturn", @"Uranus", @"Neptune" ] mutableCopy];
  另外,对于标记为static的数组(没有static的字典..哈希和排序是在编译时完成的而且cocoa框架的key也不是常数),不能使用简写为其赋值(其实原来的传统写法也不行)。解决方法是在类方法+ (void)initialize中对static进行赋值,比如:

static NSArray *thePlanets; + (void)initialize { if (self == [MyClass class]) { thePlanets = @[ @"Mercury", @"Venus", @"Earth", @"Mars", @"Jupiter", @"Saturn", @"Uranus", @"Neptune" ]; } }

下标

  其实使用这些简写的一大目的是可以使用下标来访问元素:

[array objectAtIndex:idx] 简写为 array[idx];
[array replaceObjectAtIndex:idx withObject:newObj] 简写为 array[idx] = newObj
[dic objectForKey:key] 简写为 dic[key]
[dic setObject:object forKey:key] 简写为 dic[key] = newObject
  很方便,但是一定需要注意,对于字典用的也是方括号[],而不是想象中的花括号{}。估计是想避免和代码块的花括号发生冲突吧…简写的实际工作原理其实真的就只是简单的对应的方法的简写,没有什么惊喜。

  但是还是有惊喜的..那就是使用类似的一套方法,可以做到对于我们自己的类,也可以使用下标来访问。而为了达到这样的目的,我们需要实现以下方法,
  对于类似数组的结构:

– (elementType)objectAtIndexedSubscript:(indexType)idx; – (void)setObject:(elementType)object atIndexedSubscript:(indexType)idx;
  对于类似字典的结构:

– (elementType)objectForKeyedSubscript:(keyType)key; – (void)setObject:(elementType)object forKeyedSubscript:(keyType)key;

固定桥接

  对于ARC来说,最让人迷惑和容易出错的地方大概就是桥接的概念。由于历史原因,CF对象和NSObject对象的转换一直存在一些微妙的关系,而在引入ARC之后,这些关系变得复杂起来:主要是要明确到底应该是由CF还是由NSObject来负责内存管理的问题。

  在Xcode4.4之后,之前区分到底谁拥有对象的工作可以模糊化了。在代码块区间加上CF_IMPLICIT_BRIDGING_ENABLED和CF_IMPLICIT_BRIDGING_DISABLED,在之前的桥接转换就都可以简单地写作CF和NS之间的强制转换,而不再需要加上__bridging的关键字了。谁来管这块内存呢?交给系统去头疼吧~

  Objective-C确实是一门正在高速变化的语言。一方面,它的动态特性和small talk的烙印深深不去,另一方面,它又正积极朝着各种简单语言的语法方向靠近。各类的自动化处理虽然有些让人不放心,但是事实证明了它们工作良好,而且也确实为开发者节省了时间。尽快努力去拥抱新的变化吧~

Xcode 6 Beta:iOS开发前沿与实践 随着Swift的进化和Xcode版本的更新,Interface Builder引入了许多新的控件和功能,这些更新增强了开发者构建复杂界面的能力。以下是一些显著的新增功能:Stack Views(堆栈视图):这是一个革命性的界面布局工具,允许开发者通过简单的拖放界面轻松地组织视图。通过堆栈视图,可以很容易地管理复杂的布局,因为它会自动处理子视图之间的间距和对齐。Size Class Awareness(尺寸类感知) 阅读详情

相关推荐

iOS 8应用开发基础:Xcode 6.2项目实战源代码解析

本文还有配套的精品资源,点击获取 简介:本资源为初学者及有经验开发者提供了使用Xcode 6.2和Swift 1.1在iOS 8环境下开发应用的基础示例。内容包括Swift编程语言的特性、Xcode开发环境、iOS 8的新特性(如扩展、HealthKit和HomeKit、第三方键盘支持、交互式通知、iPad多任务处理)以及源代码结构和Swift基础概念(包括结构体与枚举、类...

weixin_42163404的博客 806

oc(objective-c)新特性,ios开发 xcode4.4 ios6

2007年的时候,Objective-C在TIOBE编程语言排名里还排在可怜的第45位,而随着移动互联网的迅速发展和iPhone,iPad等iOS设备的广阔市场前景,Objective-C也迅速崛起,走进了开发者的视野。在最近的TIOBE排名中,Objective-C达到了惊人的第4名,可以说已经成为当今世界上一门非常重要的编程语言。 而Objective-C现在主要是由Apple在负责维护

725

qPCRtools | 神仙R包分分钟搞定你的qPCR实验结果!~

1写在前面 不知道大家都是怎么完成qPCR的计算的,在不会R的时候,我是用一个祖传的Excel表进行计算的。🤣 但是,一直有个缺点,如果需要计算的量比较大时,就不方便了,去搜了一下文献,发现了一个最近发表的R包,不仅可以计算反转录的RNA体积,还可以帮助选择定量方法,简直是神仙R包,本期就介绍一下它的使用吧。🥰 感谢原作者的开发,嘿嘿,文末有引用方法。👀 2用到的包 rm(list = ls())library(tidyverse)library(ggsci)library(qPCRtools)librar

m0_72224305的博客 3983

(转)iOS6和Xcode4.5初体验-图多杀猫

iOS6和Xcode4.5初体验-图多杀猫 看了WWDC2012的发布会后,作为一个开发者,当然选择第一时间下载ios6beta和与之配套的Xcode4.5preview,当然,还有最新的iTunes10.6.3。 接下来对iOS6和Xcode4.5的特性和使用体验介绍一下。 首先是iOS6,在使用Xcode4.5给4s更新到iOS6之后,我迫不及待的对其中的一些新特性进行了实际

3011

自学篇--使用keil5.23创建一个stm32工程并编译(固件包自带版本)

之前在本科学习阶段学习过一点51单片机的知识,可是因为基本没有实践过几次现在已经完全忘记了。。前几天老师突然丢给我几个板子说让我把程序编译、烧写环境装好,当时我就震惊了,不过经过三四天的自我摸索,之后参考他人的学习经验,现在已经基本能处理这个问题了,所以为了方便后面的学者,主要也是为了把自己这几天的学习成果记录一下,我在这里把这个过程写下来。(因为刚刚接触,很多原理性的东西都还不懂,只是一个操作步

yang_csdnForOBTS的博客 8658

嵌入式存储实战:FAL+SFUD+flashDB三件套在STM32上的完整移植指南(附避坑技巧)

本文提供了一套在STM32上完整移植FAL、SFUD与flashDB嵌入式存储框架的实战指南。详细解析了从SPI驱动配置、SFUD设备识别、FAL抽象层分区到flashDB键值数据库初始化的全流程,并分享了关键的避坑技巧与性能优化建议,帮助开发者构建稳定可靠的嵌入式存储系统。

rnn9storyteller的博客 1014

建议:一般地,建议使用xcode 4.3开发app 而不是使用xcode4.5

建议:一般地,建议使用xcode 4.3开发app 而不是使用xcode4.5 因为,xcode4.5 默认的sdk 是ios6.0,这里面有很多新特性。比如,Autolayout 等,这个特性再ios5.0是不支持的。所以,如果用xcode4.5开发app,要考虑比较多的兼容性。 转载于:https://www.cnblogs.com/ygm900/p/3163436.html...

weixin_30906671的博客 61

【SAP PO】SAP PO 接口配置完整教程之一RFC服务发布

SAP RFC开发,PO接口配置

XLevon的博客 2万+

Xcode的每个版本发布时间

从Xcode 3.1开始,Xcode也可被用为iPhone OS的开发环境。Xcode 4.0于2011年3月9日正式发行。该版本非Apple开发者注册会员亦能从Mac App Store中付费下载, 收取US$4.99的费用。 从Xcode 4.1开始,针对OS X 10.6及OS X 10.7用户从Mac App Store免费下载 (个人用的Xcode最低版本是4.6 发布时间大概在 20

YannChee的博客 3411

针对so层不固定位置的动态加密,怎么解决?(面试题)

Android逆向之破解某应用加密算法(动态调试so和hook so代码):so 代码动态解密后才执行,我们可以在解密完成后获取解密后的代码或数据。Android逆向之旅—动态方式破解apk进阶篇(IDA调试so源码)如果你有更具体的加密场景,欢迎提供更多信息,我可以给出更详细的方案!某些 so 在运行时生成密钥,解密后再用。某APP密码加密算法分析。

SXXYNHHXX的博客 923

SecureCRT串口连接保姆级教程:从驱动安装到波特率设置(附常见问题解决)

本文提供SecureCRT串口连接的保姆级教程,涵盖从USB转串口驱动安装、端口识别到波特率等核心参数设置的完整流程。针对连接失败、乱码、键盘输入无响应等高频问题,给出了深度排查与解决方案,帮助网络与嵌入式开发新手快速掌握串口调试技能。

weixin_29281941的博客 432

【ios6适配】旧工程适配iOS6和iPhone5的一些故事

苹果每发布一个系统,都够开发者忙活一阵的,更新xcode适配新系统:像iOS4支持Retain需要@2x的图;像iOS5不支持udid;像现在的iOS6和iPhone5要面对的下面的一堆问题。 1.添加Retina 4 launch image,运行工程的时候会主动提示你。 这时候直接点Add就好了。会默认添加一张Default-568h@2x.png的黑图: 不添加的话,程序运行起来会

九头鹰 1075

HTML流光爱心(完整代码)

HTML语言实现红蓝色流光爱心效果的完整代码。

AIGC 1万+

ios开发点滴

6.0带来的新特性; 首先4.3与4.5的不同之处在于 xcode4.5不再支持armv6即:iOS4.3.3以下的系统.不被支持的硬件设备包括:iPod 2nd gen, iPhone 3G 或更老的iPhone,也就是说如果是iOS4.3以下的手机,那么就不要想着用xcode4.5开发了; 其次在xcode4.5中,关于旋转回调的方法也有了改变,以前4.3中的旋转回调使用的是 - (BO

doctorhsly的专栏 532

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

STM32F407中文手册

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

旧工程适配iOS6和iPhone5的一些故事

 本文由论坛版主rainbird发帖分享 苹果每发布一个系统,都够开发者忙活一阵的,更新xcode适配新系统:像iOS4支持Retain需要@2x的图;像iOS5不支持udid;像现在的iOS6和iPhone5要面对的下面的一堆问题。 1.添加Retina 4 launch image,运行工程的时候会主动提示你。 这时候直接点Add就好了。会默认添加一张Default-568h@2x.png的黑...

weixin_34185364的博客 78

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UE4 开发之配置 Xcode 调试环境

前言 在上篇文章中,我与大家分享了如何在 UE4 里实现按钮事件响应的过程,应该来说如果你跟着我的步骤操作下来,实现按钮事件响应还是很简单的,但是 UE4 开发对于新手来说还是有很多不友好的地方,基本上就是一个不断填坑的过程。 由于 UE4 是跨平台的游戏引擎,所以我们也需要在 Xcode 上对游戏进行调试,查看日志等操作;相信很多刚接触 UE4 的 iOS 开发者都会遇到编译的时候调试签名报错的情况,但是切换成 Xcode 自身创建的工程发现签名证书又是匹配的,往往就在这签名的问题上耽误了大量的宝贵时间,

shenjie12345678的专栏 4411

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Xcode6 新特性

Xcode6 新特性 分类: 移动ANDROID研发 IOS研发2014-06-03 12:53 1305人阅读 评论(0) 收藏 举报 苹果在WWDC 2014上对新版Xcode(Xcode 6 Beta版)并没有提及过多,但它却是开发者不能忽视的一部分。Xcode 6 Beta版为设计和创建软件引入了新方法,更加关注功能和一些改善以提高开发者对平台功能的使用和扩展能力,

guchengyunfeng的专栏 2070

iOS10新特性及Xcode8兼容适配资料整理

iOS10新特性及Xcode8兼容适配资料整理兼容iOS10资料整理一、证书管理Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议勾选这个Automatically manage signing: Xcode未设置开发者账号情况:Xcode的偏好设置中,添加苹果账号即可。设备机器未添加进开发者的Device的情况:     3、正常情况下的截图:二、N...

lsxf_xin的专栏 1万+

IOS开发学习一 :Cocoa环境熟悉和Xcode使用

ios开发的前期准备就是一台mac机子。 我这边完全是一步一步来的。可能可以跳过很多 一。Mac的基础 1.首先就是查看你当前的操作系统,能更新升级就升级。 2.系统的很多设置,都是在偏好设置选项卡里。主要是输入法。可以下个搜狗。 点击  系统偏好设置-》语言于文本-》输入源选择上美国英语和搜狗(和win下操作很像,但是最近发现我的搜狗输入法不太管用了,切换后还是英文的。) 3.文件磁

killnono 1万+

Xcode支持iOS6、iOS7版本

Xcode升级到8.0版本后,默认只支持iOS8.0了,这时无法支持iOS8.0以下的版本了,同时项目编译时会出现一大堆的黄色警告,警告的内容是一些方法已经被弃用了,但是这些方法是可以正常使用的,只是说未来的某一天不能使用,但编译器不知道,如果项目紧急上线不想改,但又不想出现这些警告,那怎么办?烦人!其实在iOS7的时候不会出现这些警告,所以只要让我们的项目兼容到iO7、iOS6就可以了。

小源公子的博客 2341

让xcode5能使用ios6.1模拟器

自从下载了xcode5了之后,很烦人的是经常使用不了ios6.1的模拟器。 有人说这种能解决,就是把open in的选项弄成Xcode4.6. 但是对于我经常使用xib文件的,每次要在ios7和ios6.1切换的话,每次都是点到吐血。 而且ios7的状态栏改变之后,很多大神都有自己适配方法,我所使用的方法是 如果不理解的话,我前面也转了别人的一篇文章 http:/

Deoe 4955

Xcode 11.4 新特性概览

作者丨->来源丨知识小集(zsxjtip)Xcode 11.4 发布,添加了不少新特性,同时也修改了原有的一些 BUG。本文依据官方文档 Xcod...

iOS_开发 1769
上一篇: iOS系统GCD学习(12):IO资源竞争
下一篇: AFNetworking的学习
阿凡树
博客等级 码龄17年 13粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值