OC中的基本容器和基本数据类型

基本数据类型

NSRange

是一个结构体,里面有两个数据成员数据类型都为NSUInteger 就是c语言中的无符号整形,一个是location表示集合的起始地址,另外一个变量是length表示从起始地址开始算多少个元素。

NSRange的三种创建方式

	//1.
	NSRange range;
    range.length = 10;
    range.location=3;
    
    //2.
    NSRange rang1 = {1,2};
    
    //3.
    NSRange rang2 = NSMakeRange(1, 7);

NSRange的一些方法

将NSRange转化为NSString类型

//快速打印range
    NSString *str = NSStringFromRange(range);
    NSLog(@"%@",str);

NSPoint

NSPoint其实就是CGPoint

NSPoint创建方式

跟NSRange一样,也是三种方法

	NSPoint p;
    p.x = 10;
    p.y = 10;
    
    NSPoint p3 = {3,2};
    NSPoint p2 = NSMakePoint(2, 3);

NSPoint的一些方法

将NSPoint转为NSString

NSString *str = NSStringFromPoint(p);
   NSLog(@"%@",str);

NSSize

本质就是CGSize,NSSize就是一个结构体,两个成员高度height,宽度width

NSSize的使用

void size(){
    NSSize size;
    size.width = 100;
    size.height = 90;
    
    size = NSMakeSize(3, 4);
    
    NSString *str = NSStringFromSize(size);
    NSLog(@"%@",str);
}

NSRect

NSRect是一个结构体,这个结构体两个成员一个是NSPoint另外一个是NSSize;

NSRect的使用

    NSRect rect;
    rect.origin.x = 10;
    rect.origin.y = 20;
    
    rect.origin = NSMakePoint(10, 33);
    rect.size = NSMakeSize(12, 30);
    
    rect = NSMakeRect(10, 20, 30, 40);
    NSLog(@"%@",NSStringFromRect(rect));

基本容器

NSString

与C++中String类的功能很像,NSString是OC中存储字符串类型的一种容器,但是NSString内容是不可变的

NSString 的实例的创建

动态方法创建

NSSting实例的创建有很多种方式

  1. 直接赋值一个字符串,此时字符串为常量字符串
  2. 分配空间再进行初始化,此时还没有赋值默认为nil,需要对其进行赋值操作
  3. 分配空间时进行有参数的构造
  4. 用c语言格式字符串对NSString进行初始化
  5. 带有格式化参数对NSString进行赋值操作
//这中方式创建是常量字符串
    NSString *str1 = @"A String";
    
    //先分配空间再进行初始化
    NSString *str2 = [[NSString alloc] init];
    str2 = @"A String";
    
    //分配空间后进行带有参数的构造
    NSString *str3 = [[NSString alloc] initWithString:@"A string"];
    
    //分配空间后将char类型的的字符串转为NSString类型进行构造
    NSString *str4 = [[NSString alloc] initWithUTF8String:"A string"];
    str4 = [NSString stringWithUTF8String:"LOUE"];
    
    //带有格式化参数的初始化
    NSString * str5 = [[NSString alloc] initWithFormat:@"my age is %i and my height is %.2f ",19,1.22]; 
    NSLog(@"str5 = %@",str5);
静态方法创建

除了用动态方法可以创建字符串实例外,动态方法也可以创建字符串实例。
基本就是将init替换成string,其余都基本一样

//string with开头为静态方法,作用与相应的initWith开头的动态方法一样
str3 = [NSString stringWithString:@"LOUE"];

文件操作

读取文件内容

指定字符集为UTF-8

 //从文件中读取文本
 	
    NSString *path = @"/Users/bytedance/Desktop/1.txt";
    NSString *str1 = [NSString stringWithContentsOfFile: path encoding:NSUTF8StringEncoding error:nil];
    
    NSLog(@"str1 = %@",str1);

如果想要指定字符集为GBK的话,需要进行类型的转化

写入文件内容
//将字符串导出到文件
void stringCreate3(){
    NSString *str1 = @"啦啦啦啦啦啦啦";
    NSString *path = @"/Users/bytedance/Desktp/1.txt";
    
    NSError *error;
    //第二参数如果是yes,则先创建一个临时文件将数据写入临时文件,如果中途出错,则不写入目标文件
    //如果文件不存在则会帮忙创建
    //如果文件夹布村则会报错
    //覆盖掉原来文件内容
    [str1 writeToFile: path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if(error){
        //写入失败
        NSLog(@"写入失败 %@" ,[error localizedDescription]);
    }else {
        NSLog(@"写入成功");
    }
}

NSString中的一些实例方法

大小写处理
  1. uppercaseString
  2. lowercaseString
  3. capitalizedString
void stringCreate4(){
    NSString *str = @"GuangDong";
    //转成大写
    NSLog(@"大写 : %@",[str uppercaseString]);
    //转成小写
    NSLog(@"小写 : %@",[str lowercaseString]);
    //首字母变大写,其他字母变小写
    NSLog(@"is %@",[str capitalizedString]);
}
字符串比较
  1. isEqualToString 比较字符串内容是否相等,不忽略大小写
  2. 按字典顺序比较字符串compare,不忽略大小写
  3. caseInsensitiveCompare,忽略大小写
void stringCreate5(){
    //字符串比较
    //检测字符串内容是否相同
    BOOL res = [@"abc" isEqualToString:@"ABc"];
    NSLog(@"%i",res);
    
    //右边比左边大为升序
    //左边比右边大为降序
    //一样大为相等
    //按字典序比较字符串大小
    //返回值为枚举类型
    NSComparisonResult res1 = [@"abc"compare:@"Abc"];
    if(res1 == NSOrderedSame){
        NSLog(@"一样大");
    }else if(res1 == NSOrderedAscending){
        NSLog(@"右边比左边大");
    }else {
        NSLog(@"左边比右边大");
    }
    
    //忽略大小写进行比较
    NSComparisonResult res2 = [@"abc" caseInsensitiveCompare:@"ABc"];
    if(res2 == NSOrderedSame){
        NSLog(@"一样大");
    }else if(res2 == NSOrderedAscending){
        NSLog(@"右边比左边大");
    }else {
        NSLog(@"左边比右边大");
    }
}
字符串搜索
  1. hasPrefix 判断字符串是否以某个前缀开头
  2. hasSuffix判断字符串是否以某个后缀结尾
  3. rangOfString查找字符串
	NSString *p = @"123455.3333xddd";
    //判断字符串是否以某个前缀开头
    NSLog(@"p is %i",[p hasPrefix:@"12"]);
    //判断字符串是否以某个后缀结尾
    NSLog(@"p is %i",[p hasSuffix:@"ddd"]);
    
    //查找字符串中是否包含某个字符串
    //找到返回在p中的起始位置,和长度是以结构体的形式返回,需要转换为字符串进行输出
    //如果不存在长度返回的是0,起始位置是一个long类型的最大值
    NSRange range = [p rangeOfString:@"345"];
    if(range.location == NSNotFound || range.length == 0){
        NSLog(@"找不到");
    }
    else{
        NSLog(@"找到");
    }
    //反向搜索
    NSRange range1 = [p rangeOfString:@"455" options:NSBackwardsSearch];
    if(range1.location == NSNotFound ){
        NSLog(@"找不到");
    }
    else{
        NSLog(@"找到");
    }
    //指定范围搜索
    NSRange s;
    s.location = 8;
    s.length =4;
    NSRange range2 = [p rangeOfString:@"455" options:NSBackwardsSearch range:s];
字符串的截取
  1. substringFromIndex从索引位置截取到末尾
  2. substringToIndex 从开始位置截取到索引位置之前
  3. componentsSeparatedByString切割字符串
void stringCreate7(){
    NSString *str = @"123456";
    
    //从索引3开始截取到尾部
    NSLog(@"%@",[str substringFromIndex:3]);
    //从头部开始截取到某个索引位置,不包括索引
    NSLog(@"%@",[str substringToIndex:4]);
    
    //截取范围内的字符串
    NSRange s;
    s.location =2;
    s.length = 3;
    NSLog(@"%@",[str substringWithRange:s]);
    
    //切割字符串
    NSString *str2 = @"1,2,3,4,5";
    //以,进行分割
    NSArray *array = [str2 componentsSeparatedByString:@","];
    //%@默认调用对象的decribtion方法打印对象中的所有元素
    NSLog(@"%@",array);
}
NSString与路径
  1. pathWithComponents 将数组中的元素拼接成一个路径
  2. 把一个路径分解成数组 pathComponents
  3. isAbsolutePath判断是否为绝对路径
  4. lastPathComponent返回最后一个文件夹的名称
  5. stringByDeletingLastPathComponent删除最后一个文件夹
  6. stringByAppendingPathComponent最后拼接一个目录
void stringCreate8(){
    //与路径相关的API
    //快速创建一个自动释放的数组
    NSMutableArray* compoments = [NSMutableArray array];
    [compoments addObject:@"ABC"];
    [compoments addObject:@"Deecc"];
    [compoments addObject:@"Kooo"];
    NSString *path =  [NSString pathWithComponents:compoments];
    NSLog(@"%@",path);
    
    //把一个路径分解成数组
    NSArray * array = [path pathComponents];
    NSLog(@"%@",array);
    
    //判断是否为绝对路径
    path = @"users/mj/test";
    //path的值一直没有变,改变的都是返回值
    NSLog(@"%i",[path isAbsolutePath]);
    
    //返回最后一个文件夹名
    NSLog(@"最后一个文件夹名%@",[path lastPathComponent]);
    
    //删除最后一个文件夹
    NSLog(@"%@",[path stringByDeletingLastPathComponent]);
    
    //最后拼接一个目录
    NSLog(@"%@",[path stringByAppendingPathComponent:@"abc"]);
    
}
与拓展名相关
  1. pathExtension 获取拓展名
  2. stringByDeletingPathExtension 删除拓展名
  3. stringByAppendingPathExtension 拼接拓展名
void stringCreate9()
{
    //删除拓展名
    NSString *str = @"/User/M3/test.txt";
    NSLog(@"拓展名:%@",[str pathExtension]);
    NSLog(@"%@",[str stringByDeletingPathExtension]);
    
    //拼接拓展名
   
    NSLog(@"%@",[@"abc" stringByAppendingPathExtension:@"mp3"]);
}
与基础数据类型有关
  1. intValue将字符串转为整数
  2. length统计字符串的个数
  3. 取出对应索引位置的字符characterAtIndex
  4. UTF8String 将NSString转为c语言中char
void stringCreate10(){
    NSString *str = @"100";
    int a = [str intValue];
    NSLog(@"%i",a);
    
    //计算字数并不是字符数,一个中文占两个字符但只计为1
    NSLog(@"length = %zi",[@"我是字符串123"length]);
    
    // 取出对应索引位置的字符
    unichar c = [@"abc" characterAtIndex:0];
    NSLog(@"%c",c);
    
    //转划为c语言中的char
    char *s = [@"abc" UTF8String];
    NSLog(@"%s",s);
}

NSMutableString

OS中的可变字符串类型,NSMutableString是NSString的子类,所以NSString的方法,NSMutableString都可以用

NSMutableString的实例化

  1. 动态方法 initWithcapacity:空间大小
  2. 静态方法 stringWithCapacity
//预先分配10个字符的存储空间
    NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
    NSMutableString *str2 = [NSMutableString stringWithCapacity:10];

NSMutableString的一些实例化方法

  1. appendString拼接一个字符串
  2. appendFormat拼接一个格式化的字符串
  3. replaceCharactersInRange替换字符串
  4. insertString插入字符串
  5. deleteCharactersInRange删除字符串
	//拼接一个字符串
    [str appendString:@"567"];
    [str appendFormat:@"age is %i and height is %.2f ",27,1.55];
    
    //替换字符串
    //查到age的范围
    NSRange range = [str rangeOfString:@"age"];
    [str replaceCharactersInRange:range withString:@"no"];
    
    //插入字符串
    [str insertString:@"abc" atIndex:2];
    NSLog(@"%@",str);
    
    //删除字符串
    range = [str rangeOfString:@"abc"];
    [str deleteCharactersInRange:range];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 iOS Objective-C ,使用 MulticastSocket 可以实现组播接收和发送数据。 1. 创建 MulticastSocket 对象并加入组播地址: ```objective-c #import <netinet/in.h> #import <arpa/inet.h> NSString *multicastAddress = @"224.0.0.1"; int multicastPort = 8888; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr([multicastAddress UTF8String]); addr.sin_port = htons(multicastPort); int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd > 0) { bind(fd, (struct sockaddr *)&addr, sizeof(addr)); struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr([multicastAddress UTF8String]); mreq.imr_interface.s_addr = htonl(INADDR_ANY); setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); } ``` 2. 接收数据: ```objective-c char buf[1024]; socklen_t addrlen = sizeof(addr); int len = recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&addr, &addrlen); if (len > 0) { NSString *msg = [[NSString alloc] initWithBytes:buf length:len encoding:NSUTF8StringEncoding]; NSLog(@"Received Data: %@", msg); } ``` 3. 发送数据: ```objective-c NSString *msg = @"Hello, World!"; const char *data = [msg UTF8String]; sendto(fd, data, strlen(data), 0, (struct sockaddr *)&addr, sizeof(addr)); ``` 需要注意的是,在接收数据时需要先调用 `bind` 绑定端口,然后再加入组播地址。另外,在发送数据时也需要指定组播地址和端口。 同时,也需要在项目的 Info.plist 文件添加一个权限请求: ```xml <key>NSMulticastNetworkingUsageDescription</key> <string>使用组播接收和发送数据</string> ``` 这样就可以在 iOS Objective-C 使用 MulticastSocket 实现组播接收和发送数据了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值