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

2023-11-10

基本数据类型

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];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OC中的基本容器和基本数据类型 的相关文章

  • iOS开发设置状态栏字体颜色

    状态栏的字体为黑色 UIStatusBarStyleDefault 状态栏的字体为白色 UIStatusBarStyleLightContent 一 在info plist中 将View controller based status ba
  • iOS基础教程-SQLite数据库操作(二简单实例学生信息增删改查数据库操作)

    学生名单管理界面实现数据库的增删改操作 关于UI部分 我们使用storyboard简单完成 在上一篇文章中有详细的描述iOS基础教程 SQLite数据库操作 一 StoryBoard操作 SQLite操作前准备工作 本篇结束以后 就可以完成
  • JSBinding iOS与JS交互(When-iOS-loves-JS)

    What s JSBinding It s Not Hybrid It s NOT a new technology JSBinding 绑定JS和Native JSBinding和HyBrid的对比 原生OC语音和脚本JS语言对比 API
  • iOS架构-组件化(项目实战-项目首页架构)

    UI架构设计 设计模式 外观模式 代理模式 适配器模式 adapter 注意 一版本只是搭建结构 一 1 0 Tab搭建 二 1 1 新增UICollectionView 主页 gt 整体设计基于 gt UICollectionView 滑
  • 错误贴

    pod 报错 bash usr local bin pod System Library Frameworks Ruby framework Versions 2 0 usr bin ruby bad interpreter No such
  • iOS架构-组件化(Carthage管理工具)

    一 Carthage项目管理工具使用 Step 1 安装 更新Homebrew工具 1 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install ma
  • TestFlight 添加测试人员 (内部测试人员)

    用有管理员身份的账号登陆 itunes connect 在登陆页面可以看到如下界面 选择用户和职能 会看到之前已经添加的用户 可以管理用户的app访问权限 找到 添加用户 输入用户的apple id一般是注册时候的邮箱地址形式 添加成功后会
  • flutter iOS 屏蔽黑暗模式

    前言 因为项目没有考虑到适配黑暗模式的场景 所以为了避免出现各种各样奇葩的问题 我们是建议把黑暗模式关闭 这样加能解决许多的bug 一 flutter层面设置 override Widget build BuildContext conte
  • iOS开发之 __block 与 __weak的区别理解

    资料来源1 资料来源2 block对象在block中是可以被修改 重新赋值的 使用了 weak修饰符的对象 作用等同于定义为weak的property 自然不会导致循环引用问题 因为苹果文档已经说的很清楚 当原对象没有任何强引用的时候 弱引
  • IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    转载自 任海丽的博客 原址 http blog csdn net rhljiayou article details 9919713 首先了解一下CGContextRef An opaque type that represents a Q
  • iOS开发判断版本号不同

    判断是否是第一次启动或者版本号不同时 NSString key CFBundleVersion 上一次打开的版本号 存储在沙盒中的版本号 NSString lastVersion NSUserDefaults standardUserDef
  • 微信支付服务端开发总结

    原文链接 http blog csdn net baple article details 68059283 前言 最近应公司业务需求 把微信支付完成了 当然已经顺利上线 但是开发的过程是也是踩了很多坑 下面我就先说说开发流程 以及在开发中
  • OC中的基本容器和基本数据类型

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

    异常上报 SDK 集成 通过CocoaPods集成 新建项目 cd 项目目录 vim Podfile source https github com CocoaPods Specs git inhibit all warnings plat
  • iOS开发之动画篇-基础篇1

    基础篇 一 制作动画的原理 十二个基本的动画原理 网页动画的十二原则 参考全部开源的HTML和CSS代码实现 二 寻找灵感 1 知名设计师共享平台 Dribbble相当于程序员的gitHub 2 pttrns 手机设计较多 三 制作动画的基
  • iOS APP 启动页和icon图标尺寸

    前言 记录一下竖屏iPhone启动页和icon图标尺寸 好记性不如烂笔头 1 启动页尺寸 320x480 640x960 640x1136 750x1334 1125x2436 1242x2208 1242x2688 828x1792 2
  • iOS 报错:没有查看权限the file "xxx.app" couldn't be opened because you don't have permission to view it.

    iOS the file xxx app couldn t be opened because you don t have permission to view it 问题解决方法汇总 1 最近重构项目 增加target来区分环境进行差异
  • iOS

    我们有的时候在创建UIView的时候 想要使用xib进行创建视图发现 xib文件不能和UIView文件一起创建 所以 我们要单独创建xib文件 我们选择Empty文件 而不要选择View文件 记得文件名和你之前创建的UIView文件名要一致
  • iOS开发-国际化-配置App多语言

    作者 大慈大悲大熊猫 链接 http www jianshu com p 1edd4bda6fe5 來源 简书 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 基本设置 第一步 先在Project的info里添加所需要支
  • Testflight 添加外部测试人员

    内部测试人员 不需要提供所有的metadata 外部测试人员 为了使得外部人员可以测试app的预发布build 必须提供如下的metadata What to test App description Feedback email Mark

随机推荐

  • deepfake教程

    https github com iperov DeepFaceLab 首先下载根据不同系统不同显卡分类下载对应版本 能在文件夹下看到以下命令 一 clear workspace 重置 一 提取帧 extract images from v
  • k8s占用的端口号用 kubectl get svc 和lsof -i、netstat 命令都查不到

    如果你使用了 kubectl get svc 和 lsof i 或 netstat 命令查看端口 却没有查到 Kubernetes 的服务 有可能是因为 Kubernetes 服务运行在容器内部 在这种情况下 你可以通过以下步骤来查看 Ku
  • 音视频 ffmpeg ffplay ffprobe命令行

    ffmpeg工具 命令格式 ffmpeg 全局选项 输入选项 i input url 输出选项 output url 帮助命令 查看解封装帮助 dhav ffmpeg4 2才有 ffmpeg h demuxer dhav ffmpeg h
  • 黄广斌谈ELM进展:为深度学习提供理论支持, 将勾连生物学习

    强大的深度神经网络 仍有很多待解决的问题 超限学习机 ELM 发明人 新加坡南阳理工大学副教授黄广斌认为 ELM能够有效地拓展神经网络的理论和算法 近日 黄广斌发表文章 超限学习机 筑梦普适学习和普适智能 Extreme learning
  • 【数据结构】堆的向上调整和向下调整以及相关方法

    文章目录 一 堆的概念 二 堆的性质 三 堆的分类 1 大根堆 2 小根堆 四 说明 五 堆的结构 六 堆的向上调整 1 图示 2 代码实现 3 时间复杂度分析 七 堆的向下调整 1 思路 2 代码实现 八 删除根 1 思路 2 代码实现
  • CentOS6 YUM 源失效问题解决办法

    问题描述 Yum 源失效 无法正常使用 Yum 错误信息如下 http mirrors aliyun com centos 6 updates x86 64 repodata repomd xml Errno 14 PYCURL ERROR
  • CentOs 6.5下java 安装

    我们下载jdk 的rpm包到要安装的服务器上 然后要进行下面的工作 1 移除系统自带的jdk 1 查找系统自带的jdk版本 输入命令 rpm qa grep jdk 2 移除系统自带的jdk 输入命令 yum y remove java 1
  • fatal: Not a git repository (or any of the parent directories): .git

    问题描述 解决方案
  • js之事件委托

    在js的事件流模型中 事件的触发分为3个阶段 1 捕获阶段 由外向内传播 寻找目标元素 2 目标阶段 找到事件触发的目标元素 3 冒泡阶段 事件由内向外冒泡 事件委托也被称为事件代理 那么是事件委托呢 用一个例子来说明 div div di
  • 万字详解:Activiti 工作流引擎

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • BART论文要点解读:看这篇就够了

    全称 Denoising Sequence to Sequence Pre training for Natural Language Generation Translation and Comprehension BART来源于Bidi
  • java晋级赛 深入并发编程

    根据黑马java并发编程学习做的笔记 传送门 https www bilibili com video BV16J411h7Rd p 15 java晋级赛 深入并发编程 一 多线程基础 进程与线程 创建线程的方式及运行原理 创建线程的方式
  • 进程调度的控制—文件锁

    前言 在进程之间 我们不能决定应该先去调度哪一个进程 这时候我们就需要对一个文件加锁 来要求那个先来执行 整体文件锁 int flock int fd int operation fd 文件描述符 operation 定义的宏 也就是选项
  • STL标准模板库学习笔记一(STL序列容器)

    目录 STL 容器 STL迭代器 array vector deque功能 list 和 forward list 功能 vector emplace back 和push back 的区别 vector插入函数insert和emplace
  • ST7796S MIPI单通道, 320x480初始化代码

    ST7796S MIPI单通道接口 320x480分辨率初始化代码 代码示例 loadWidthSet 320 loadHeightSet 480 loadHBPSet 180 loadVBPSet 20 loadHFPSet 20 loa
  • 【C语言】统计素数并求和

    改名字了 2022 2 26之前叫 回到正题 由题可知 题目要求在用户自己输入的定整数M和N区间内求出素数的个数 并且对他们求和 要想解决编程题目 首先要知道题目问的是什么 素数一般指质数 质数是指在大于1的自然数中 除了1和它本身以外不再
  • 版本控制之最佳实践(Git版)

    现如今 应该每个开发者都在使用版本控制工具了吧 然而 如果你理解版本控制的基本规则 你便能更好地发挥它的效用 在此 我们汇总了一些最佳实践 希望你在使用Git做版本控制时能够了然于心 得心应手 1 相关的改动才放一起提交 一次提交 git
  • hi35 web服务器

    在hi3516A上移植好的boa嵌入式web服务器代码 boa有61k 一次只能处理一个请求 https download csdn net download ganxiaoyagn000 9239729 appweb Appweb 6 1
  • android 11 存储权限,Android 11存储权限强制申请

    private static final int REQUEST CODE 1024 private void requestPermission if Build VERSION SDK INT gt Build VERSION CODE
  • OC中的基本容器和基本数据类型

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