黑马程序员------OC Foundation框架

 ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

        Foundation 框架

一.Foundation框架的介绍

   框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在os x下的mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation框架

      Cocoa 是Foundation和AppKit

      Cocao Touch是Foundation和UIKit

   要想使用Foundation框架中的功能,包含它的主文件即可#import<Foundation/Foundation.h>

   Foundation 框架包含了很多开发中常用的数据类型 结构体、枚举、类等。

 

二、NSString介绍及基本使用

     一个NSString对象就代表一个字符串(文字类容),一般称为NSString为字符串类

   

    NSString的创建方式 

       1)最直接的方式(这是常量字符串)

           NSString *str = @"abc";

       2)格式化的方式

            NSString *str1 =[NSString  stringWithFormat:@"%@",@"jack"];

            NSString *str2 =[NSString  stringWithFormat:@"my age is %d",10]

        注意:这中写法,字符串是存储在内存的堆区(地址不一样)

       3)从文件中读取

           NSString *str3 = [NSStringWithContentsOfFile:@"/Users/apple/Desktop/t.txt"encoding:NSUTF8StringEncoding error:&err];

         注意: 

             如果读取到内容  

       if(err == nil){

        NSLog(@"读取成功的情况");

        NSLog(@"%@",str3);

       }else{

        NSLog(@"文件读取失败");

        NSLog(@"%@",err);

     }

   //可以通过[err loclizedDescription];打印简单的错误信息

    //NSLog(@"%@",[err localizeDescription])

 

 三、.NSURL读写字符串

 

 NSString *str = @"$10000000";

 

 //URL统一资源定位符

//NSURL OC提供了一个URL处理的一个类

 //http   https// 加密  ftp://  file:// 本地文件  NSURL 写入文件

 1)通过 URLWithString 构建一个NSURL

      URLWithString  可以构建本地路径的URL

               可以构建路径,调用手机系统的程序

        NSURL *url = [NSURL URLWithString:@"sms://10086"];

        NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/3.txt"];

 

2) fileURLWithPath 获取本地文件路径

      NSURL *url = [NSURL fileURLWithPath:@"/Users/zhaoxiaohu/Desktop/4.txt"];

 

      if([str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]){

 

            NSLog(@"写入成功");

 

      }

 

      NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

四.NSString 的使用介绍

1.字符串比较

      NSString *str1 =@"_abc";

       NSString *str2 =@"bcd";

    //取出每个字符的ASCII 码值,比较ASSICC码值的大小

    //compare方法比较大小   默认的区分大小写 这个函数不能增加条件

    //        NSComparisonResult reslut = [str1 compare:st2];

 

    //比较的时候,不区分大小写,参考字符的个数

    NSComparisonResult result =[str1 compare:str2 options:NSCaseInsensitiveSearch | NSNumericSearch];

    switch (result) {

    case NSOrderedAscending:

    NSLog(@"str>str2 升序");

    break;

    case NSOrderedDescending:

    NSLog(@"str<str2 降序");

    break;

    case NSOrderedSame:

    NSLog(@"str==str2 ");

    break;

    default:

    break;

    }

 

 

    //地址比较判断字符处是否相等 。真正的相等  他是区分大小写的

    if (  [str1 isEqualToString: str2]){

    NSLog(@"相等");

 

    }else{

    NSLog(@"不相等");

    }

 

2.NSString前后缀检查及搜索

 

    //检车字符串的前后缀

    NSString *url=@"http://ios.itcat.cn";

    1)如何检测一个字符串是否是网址 http://   https://

    //检测一个字符串的前后缀是否以 http://   https:// 开头

    //[str hasPerfix:@"要检测的内容"]

    if( [url hasPrefix:@"http://"]| [url hasPrefix:@"https://"]){

    NSLog(@"是一个网址");

    }else{

    NSLog(@"这不是一个网址");

    }

 

    2)检测车字符串的后缀

    //xxx.jpg 判断后缀是不是."jpg"

        NSString *imgName =@"xxxx.jpg";

     if ([imgName hasSuffix:@".jpg"]|[imgName hasSuffix:@".png"]|[imgName hasSuffix:@".jpeg"])

        {

        NSLog(@"这是一个图片");

        }else{

    NSLog(@"这不是一个图片");

    }

 

 3.字符串的查找

    查找某个字符串在另外一个字符串首次出现的位置

        查找2 在 1中首次出现的位置

    如果查找到了,返回2在1中的位置和长度

    如果查找不到,返回的信息:

            location   特别大的数(NSNotFound) 最大的long类型的数

            length     0

    range 结构体变量  NSRange 结构别名

    NSString *str =@"ssadjdiosdknkliiwprp";

    NSString *str1=@"ios";

    NSRange range =[str rangeOfString:str1];

    //range.location 表示字符串首次出现的位置

    //range.length 字符串出现的长度(实质上就是子字符串的长度)

    if (range.location!=NSNotFound) {

    NSLog(@"%lu,%lu",range.location,range.length);

    }else{

    NSLog(@"在%@中没有找到这个字符串%@",str,str1);

    }

 

 

 4.字符串的截取和替换

    NSString *str=@"http://www.baidu.com";

    

  1).从开始位置,到最后结束(包含xx这个位置)

    NSString *str1 =[str substringFromIndex:5];

    NSLog(@"str1 =%@",str1);

 

  2)从开始位置到xx位置结束(不包含文件的位置)

    NSString *str2 = [str substringToIndex:5];

    NSLog(@"str2 =%@",str2);

 

   3)截取一范围  range

    NSRange r1={3,4};

    NSString *str3=[str substringWithRange:r1];

    NSLog(@"str3 =%@",str3);

 

 

    4)字符串的替换

    //@"sadsaldjejeiwrwwrjasjlasd"------>a 替换成"*"

    //@"sad dfd f gfgf fhf sd"--->去掉空格

    NSString *str = @"sadsaldjejeiwrwwrjasjlasd";

    //str stringByReplacingOccurrencesOfString:@"源字符串中的内容" withString:@"要替换成新的内容"把a替换成 *

    NSString *newStr =[str stringByReplacingOccurrencesOfString:@"a" withString:@"*"];

    NSLog(@"newStr= %@",newStr);

 

    //把空格给去掉

    str=@"sad dfd f gfgf fhf sd";

    newStr =[str stringByReplacingOccurrencesOfString:@"a" withString:@""];

    NSLog(@"newStr= %@",newStr);

 

5.NSRange的使用

 

    NSRange range; //结构体变量

    NSRange * r; // r结构体指针

 

    //range变量的初始化方式

    1)通过结构体变量访问成员

    range.location =3;

    range.length =2;

 

    2)结构体变量整体赋值n

    range =(NSRange){5,3};

    NSRange r2={5,6};//最简单

 

    //oc中新增的 NSMakeRange结构体变量赋值

    NSRange r4 =NSMakeRange(3, 4);

    //把结构体变量转换为 NSString类型

    NSLog(@"%@",NSStringFromRange(r4));

 

 6.NSString的其他区用法

    OC的字符串和 C的字符串互相转换问题

    char*  NSString

    1) C---->OC对象

 

    char *s = "zhangsanfeng";

    printf("%s\n",s);

 

    思路:创建一个OC的字符串对象,用C语言的字符串创建

    NSString *str = [NSString stringWithUTF8String:s];

    NSLog(@"str = %@",str);

 

    2) OC对象 --> C的字符串

    NSString *str2 = @"zbz";

    // 把str2 转 C的字符串

    const char *s1 = [str2 UTF8String];

    printf("s1 = %s\n",s1);

 

 五、NSMutableString的使用介绍

  1.使用介绍

    //不可变: 字符串占用的 空间 和 字符串 的内容,都不能改变

    //可变: 字符串占用的空间和字符串的内容,都可以改变

 

    NSString *str = @"Jack";   //常量区

    NSLog(@"str addr =%p",str);

 

    str = @"Rose";

    NSLog(@"str addr =%p",str);

 

    //可变的字符串

    NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];

    NSLog(@"str2 addr =%p",str2);

 

 

    [str2 appendString:@"&Rose"];

    NSLog(@"str2 addr =%p",str2);

 

    NSLog(@"str2 = %@",str2);

 

    //思考:

 

    //创建一个可变的空字符

    NSMutableString *str3 = [NSMutableString string];

    NSLog(@"str3 = %@",str3);

    for (int i=0; i<10; i++) {

    [str3 appendString:@" itcast"];

    }

 

    NSLog(@"str3 = %@",str3);

 

 2.常用方法

 

    NSMutableString *str = [NSMutableString string];

 

    1) appendFormat 格式化的添加字符串

    //                  0123456789

    [str appendFormat:@"http://www.baidu.com/%d",100];

 

    //str http://www.baidu.com/100

    NSLog(@"%@",str);

 

    2) 删除字符串一部分内容

    [str deleteCharactersInRange:NSMakeRange(3, 4)];

    NSLog(@"%@",str);

    3) 插入一个字符串

    [str insertString:@"p://" atIndex:3];

    NSLog(@"%@",str);

 

    4) 替换字符串的一部分内容

    [str replaceCharactersInRange:NSMakeRange(11, 5) withString:@"itcast"];

        NSLog(@"%@",str);

    }

 六、NSArray使用介绍

 1.介绍

    NSArray特点:  一旦创建成功,内容不可改变  只能存放OC对象

 

    1)创建一个空数组

    NSArray *arr1 = [NSArray array];

 

    2)创建数组,只有一个元素

    NSArray *arr2 = [NSArray arrayWithObject:@"1"];

 

    3)创建数组,有多个元素

    nil 表示数组赋值结束

    // 常见写法

    NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil];

    NSLog(@"arr3 = %@",arr3);

    4)调用对象方法,创建数组

    //nil Nil NULL  NSNULL

    NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil];

    NSLog(@"arr4 = %@",arr4);

    5)用一个数组可以创建另外一个数组

    NSArray *arr5 = [NSArray arrayWithArray:arr3];

    NSLog(@"arr5 = %@",arr5);

 

 2.数组的常见用法

    NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil];

    NSLog(@"arr3 = %@",arr3);

 

    1)获取数组的长度  count获取数组的元素的个数

    NSLog(@"%ld",arr3.count);

 

    2)根据下标,获取下标对应的对象

    NSLog(@"%@",[arr3 objectAtIndex:3]);

 

    3)返回元素的下标

    NSUInteger loc = [arr3 indexOfObject:@"three"];

    NSLog(@"%ld",loc);

 

    4)数组中是否包含了某个元素

    if([arr3 containsObject:@"four"]){

 

    NSLog(@"包含此元素");

 

    }else{

 

    NSLog(@"不包含");

    }

 

   用简化的方式,来定义和访问数组元素

    1)用简化的方式,定义数组

    格式: @[ 数组元素 ]

    NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];

    NSLog(@"arr = %@",arr);

 

    NSString *str =[arr objectAtIndex:2];

    NSLog(@"%@",str);

 

    2)用简化的方式访问数组元素

    str = arr[1];   //C语言形式的数组元素访问

    NSLog(@"%@",str);

 

 3.遍历方法

    定义一个数组

    NSArray *arr = @[@"one",@"two",@"three",@"four"];

 

    对数组进行遍历

 

    1) 普通的方式,通过下标访问

    for (int i=0; i<arr.count; i++) {

    NSLog(@"-> %@",arr[i]);

    }

 

    2) 快速枚举法 for循环的增强形式

    for (NSString * str in arr) {

    NSLog(@"---> %@",str);

    }

 

 

    3) 使用block的方式,进行访问

                                数组元素            元素下标     是否停止

    //stop:YES  会停止, stop:NO 不会停止

    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

 

    if(idx == 2){

 

    *stop = YES;  //停止  // break;

 

    }else{

 

    NSLog(@"idx = %ld,obj = %@",idx,obj);

    }

 

    }];

 

4.读写文件

       NSArray *array = [NSArray arrayWithObjects:@"one",@"zbz",@"cgx",@"sb",@"cjk",@"senni", nil];

       //把NSArray 中的内容,写入到文件中

       //arr.plist 一种特殊的文件格式

       BOOL isWrite =  [array writeToFile:@"/Users/zhaoxiaohu/Desktop/arr.xml" atomically:YES];

 

       if(isWrite){

            NSLog(@"写入成功");

         }

 

       从文件中,读取一个数组信息

        NSArray *readArr = [NSArray arrayWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/arr.xml"];

 

        NSLog(@"readArr = %@",readArr);

5.NSArray 与数组

    //定义一个数组

    NSArray *arr = @[@1,@2,@3,@4];

 

    1)需求: 把数组中的元素用 "-" 连接起来

    [数组 componentsJoinedByString @"分隔符"];

    // 1-2-3-4

    NSString *str = [arr componentsJoinedByString:@"-"];

    NSLog(@"str = %@",str);

 

 

 

    2) 给一个字符串,分割成一个数组

    // 400-800-12580   //取得 400    12580    800

    NSString *str2 = @"400-800-12580";

    NSArray *arr2 = [str2 componentsSeparatedByString:@"-"];

    NSLog(@"%@",[arr2 firstObject]);

    NSLog(@"%@",[arr2 lastObject]);

    NSLog(@"%@",arr2[1]);

 

    str2 = @"400-800-12580#400-888-11200";

    NSArray *arr3 = [str2 componentsSeparatedByString:@"#"];

    NSLog(@"arr3 = %@",arr3);

 

    //第一个电话的每一部分

    NSArray *arr4 =  [[arr3 firstObject] componentsSeparatedByString:@"-"];

    NSLog(@"arr4 = %@",arr4);

 

    NSArray *arr5 =  [[arr3 lastObject] componentsSeparatedByString:@"-"];

    NSLog(@"arr5 = %@",arr5);

    }

七、NSMutableArray的基本使用

    数组的使用

    1)创建数组

        i. 空数组

            NSMutableArray *arr1 = [NSMutableArray array];

            NSLog(@"%p",arr1);

 

        ii.创建的时候初始化一个元素

            NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];

 

        iii.创建数组的时候,初始化多个元素

            NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];

 

        IV . 创建一个数组,并且指定长度,

            NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];

 

 

 

    2) 添加元素

    [arr1 addObject:@"fengjie"];

 

    NSLog(@"%p",arr1);

    //插入元素到指定的位置

    [arr1 insertObject:@"zbz" atIndex:0];

 

 

    3) 删除元素

    根据对象内容删除

    //        [arr1 removeObject:@"zbz"];

    //根据位置删除

    //        [arr1 removeObjectAtIndex:1];

    //全部删除

    [arr1 removeAllObjects];

 

 

 

    4) 修改元素

    //two --> four

    [arr3 replaceObjectAtIndex:1 withObject:@"four"];

    //four --> five

    //更加简单地方法

    arr3[1] = @"five";

    NSLog(@"%@",arr3);

 

    5) 查找元素

    BOOL isSearch = [arr3 containsObject:@"four"];

    NSLog(@"%d",isSearch);

 

    /6) 交换元素

    // 1   2   3   4   5

    // 5   2   3   4   1

    //temp = a[0];

    //a[0] = a[len-1];

    //a[len-1] = temp;

    NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];

    // 可以交换数组元素

    [arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];

    NSLog(@"%@",arr5);

 

八、NSDictionary的介绍及使用

 1.介绍

    

    NSDictionary 不可变的,一旦创建,内容就不能添加\删除(不能改动)

    1)创建空字典

    NSDictionary *dict1 = [NSDictionary dictionary];

        // key    value

        // zs ---> 张三

        // ls ---> 李四

        // mz ---> 码子

    2)创建只有一组键值对的字典

    NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"];

 

    3)创建多组键值对的字典

    // value值,key值

    NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2", nil];

 

    //注意;

    // 字典的key值和value值,都必须是对象

 

    4)快速创建一个字典

    @{,,key值:value值,,,};

    key值不能重复:

    如果重复了,也不会报错

    如果重复了,最后添加的将不能够保存到字典中

 

        NSDictionary *dict4 = @{@"zs":@"zhaosi",@"zs":@"zhangsan",@"ls":@"lisi",@"bz":@"banzhang"};

 

    NSLog(@"%@",dict4); //以%@格式打印字典,控制台输出一个{   }

    5)获取字典的长度

        NSLog(@"%lu",dict4.count);

    6)根据key值取出value值

        //      zs      zhaosi

        //                                   key

        NSString *str = [dict4 objectForKey:@"zs"];

        NSLog(@"str = %@",str);

 

    7)字典的遍历问题

    /第一步:获取所有的key

    第二步:根据key获取value

            for(NSString *key in dict4){

            NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);

            }

                                                    key     value       stop

        [dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

 

        NSLog(@"%@ --> %@",key,obj);

 

        }];

 

2.简写及文件操作

    1)用简写形式定义一个字典

    NSDictionary *dict = @{@"zbz":@"zhangbozhi",@"cgx":@"chenguanxi",@"xzmly":@"hello"};

 

    2)用简写形式,获取key对应的value

        NSLog(@"%@",dict[@"zbz"]);

 

    3)把字典保存到文件中

        BOOL isWrite = [dict writeToFile:@"/Users/zhaoxiaohu/Desktop/dict.plist" atomically:YES];

            if (isWrite) {

            NSLog(@"写入成功");

            }

 

    4)从文件中读取字典

        NSDictionary *readDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/zhaoxiaohu/Desktop/dict.plist"];

        NSLog(@"readDict = %@",readDict);

 

 九、NSMutableDictionary的介绍及使用

        1)可变字典的创建

        NSMutableDictionary *dict1 = [NSMutableDictionary dictionary]; //创建空字典

        NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithCapacity:3];

 

        2)给可变字典添加键值对

 

        [dict1 setValue:@"zhaosi" forKey:@"ls"];//因为key值重复了,所以添加不上

        [dict1 setValue:@"lisi" forKey:@"ls"];  // ls

 

        [dict1 setValue:@"liuneng" forKey:@"ln"];

        NSLog(@"%@",dict1);

 

        3)删除

            [dict1 removeObjectForKey:@"ls"];

            [dict1 removeAllObjects];

        NSLog(@"%@",dict1);

        4)修改

 

        [dict1 setObject:@"zhaosi" forKey:@"ls"];

        //简写形式

        dict1[@"ls"] = @"xxxxx";

        NSLog(@"%@",dict1);

        5)查找

        获取所有的key值

        NSArray *arr = [dict1 allKeys];

        if([arr containsObject:@"ls"]){

 

            NSLog(@"存在ls的key");

        }

 

十、NSFileManger介绍使用

 1.使用介绍

        //NSFileManager 用于判断

 

        NSString *filePath = @"/Users/zhaoxiaohu/Desktop/arr.plist";

 

        NSString *filePath2 = @"/";

 

        1) 判断文件是否存在

        创建文件管理对象

        调用defaultManager 创建一个文件管理的单例对象

        单例对象:在程序运行期间,只有一个对象存在

        NSFileManager *fm = [NSFileManager defaultManager];

        // YES 存在   NO 不存在

        BOOL isYES = [fm fileExistsAtPath:filePath];

        NSLog(@"-->%d",isYES);

 

 

        if(isYES){

        BOOL isDir;

 

        2) 判断是否是一个目录

        [fm fileExistsAtPath:filePath isDirectory:&isDir];

 

        if (isDir) {

        NSLog(@"这是一个目录");

        }else{

 

        NSLog(@"这不是一个目录");

        }

 

        }

 

        3) 判断文件是否可读

 

        isYES = [fm isReadableFileAtPath:filePath];

 

 

        4) 是否可写

        isYES = [fm isWritableFileAtPath:filePath2];

 

 

        5) 是否可删除

        isYES = [fm isDeletableFileAtPath:filePath2];

 

        NSLog(@"-->%d",isYES);

 

2.深入用法(一)

        //创建文件对象

        NSFileManager *fm = [NSFileManager defaultManager];

        NSString *filePath = @"/Users/zhaoxiaohu/Desktop/arr.plist";

 

            NSString *dirPath = @"/Users/zhaoxiaohu/Desktop/a";

 

        1)如何获取文件的信息(属性)

        NSDictionary *dict = [fm attributesOfItemAtPath:filePath error:nil];

        NSLog(@"%@",dict);

        NSLog(@"%@,%@",[dict objectForKey:@"NSFileOwnerAccountName"],dict[@"NSFileOwnerAccountName"]);

 

        2)获取指定目录下文件及子目录

        //使用递归的方式 获取当前目录及子目录下的所有的文件及文件夹

        NSArray *subPaths = [fm subpathsAtPath:dirPath];

 

        //subpathsOfDirectoryAtPath 不是使用递归的方式获取的

        subPaths = [fm subpathsOfDirectoryAtPath:dirPath error:nil];

        NSLog(@"subPaths = %@",subPaths);

 

 

 

        3)获取指定目录下的文件及目录信息(不在获取后代路径)

        subPaths = [fm contentsOfDirectoryAtPath:dirPath error:nil];

        NSLog(@"subPaths = %@",subPaths);

 

 深入用法(二)

        //创建文件管理对象

        NSFileManager *fm = [NSFileManager defaultManager];

 

        //如何创建目录 (路径  :/Users/zhaoxiaohu/Desktop/aaa)

        NSString *createDirPath = @"/Users/zhaoxiaohu/Desktop/aaa/ccc/bbb/love.txt";

                fm createDirectoryAtPath:@"路径" withIntermediateDirectories:YES/NO 创建路径的时候,YES自动创建路径中缺少的目录,NO的不会创建缺少的目录 attributes:属性的字典 error:错误对象

 

                BOOL isYES = [fm createDirectoryAtPath:createDirPath withIntermediateDirectories:YES attributes:nil error:nil];

        

                if (isYES) {

                    NSLog(@"成功");

                }

 

        如何创建文件

        NSString *str = @"每当我错过一个女孩,我就向山上放一块砖,于是就有了长城";

        writeToFile

            fm createFileAtPath:@"路径" contents: NSData类型的数据 attributes:文件的属性的字典

        创建NSData?   是一个处理二进制数据的类

        NSString -----> NSData

 

        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

        BOOL isYes;

            // createFileAtPath 创建文件

        isYes = [fm createFileAtPath:createDirPath contents:data attributes:nil];

            NSLog(@"isYes = %d",isYes);

 

        如何copy文件

            NSString *targetPath = @"/Users/zhaoxiaohu/Desktop/aaa/ccc/love.txt";

        [fm copyItemAtPath:createDirPath toPath:targetPath error:nil];

 

        NSString *targetPath = @"/Users/zhaoxiaohu/Desktop/aaa/love.txt";

        //如何移动文件

        [fm moveItemAtPath:createDirPath toPath:targetPath error:nil];

 

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值