OC_关于NSString的使用

请各位回忆在我们学习C语言、C++、Java时都接触过string的概念,现在我们又要学习OC的字符串类型:NSString。那他们之间都有什么不同之处呢
那又有什么相同之处呢?
首先C语言的字符串其实并不是一个新的类型,事实上他只不过是一个char数组,而且在数组的末尾必须要有'\n'以表示字符串结束,如果没有'\n'
作为结束符,将会造成不可预知的后果,系统会一直在内存内向下寻找直到找到'\n'为止。
而C++的字符串string我们都知道他实际就是一个C++对象。
而Java的字符串分为三种String、StringBuffer、StringBuilder,其中string是不可变的对象,而后面二者是可变对象,其中又分为线程安全以及
线程不安全。
接下来我们开始讲解OC的字符串NSString,不过在讲解NSString我首先来讲解一下指针的一些内容,

首先我们先看下面的图解:

上面就是一张关于内存结构的图片,其中圆角矩形代表的是一个内存块,而每个内存块都要保存数据(所保存的内容),每个内存块都占用一定的内存

空间(内存块的大小),每个内存块都要要存在于内存的特定位置(内存的地址)。好了,我们基本了解内存块的属性之后就可以认识一下内存块的类型

,如上图所画的的内容可以看出,圆角矩形分为黄色和蓝色,而且每个内存块都分上下两部分,接下来我们就分别讲一下这两个问题:

关于颜色:黄色的代表此内存块是一个指针,而蓝色的代表内存块是一个对象

关于结构:圆角矩形的上半部分保存的是内存块的内容,而下半部分表示的是内存块所在的地址。那么好了我们看到str的内容是一个地址,而这个地址保存

的内容还是一个地址(*t),(*t)保存的地址保存的是一个字符串,那么问题就来了我们如何通过(**str)来改变(*t)所指向的地址的内容?其实很简单,我

们通过str获取t的内容,然后在修改t 所指向的地址的内容就可以了,就是 (**str == *t) = true

下面我们将正式讲解NSString:

1、关于NSString的创建:

直接赋值:NSString* str = @"gdshd";

先创建对象然后赋值:NSString *str = [[NSString alloc] init]; str = @"cdsj";

使用使用构造方法直接初始化

使用NSString初始化:NSString *str = [[NSString alloc] initWithString:@"vdhjbhjd"];

使用NSString静态初始化:NSString *str = [NSString  stringWithString:@"vdhjbhjd"];

使用格式化初始化:NSString *str = [[NSString alloc] initWithFormat:@"_%i_",1];

使用格式化静态初始化:NSString *str = [NSString stringWithFormat:@"_%i_",1];

使用本地文件初始化NSString:

NSerror *error;

NSString *path = @"/User/Apple/Desktop/test.txt";

NSString *str = [NSString stringWithContentOfFile:path encoding:NSUTF8StringEncoding error:error];

if(error ~= nil){

    NSLog(@"Error");

}

使用本地文件的URL初始化NSString:

NSerror *error;

NSURL*path =[NSURL URLWithString: @"file:///User/Apple/Desktop/test.txt";

NSString *str = [NSString stringWithContentOfURL:path encoding:NSUTF8StringEncoding error:error];

if(error ~= nil){

    NSLog(@"Error");

}

使用网络文件初始化NSString:

NSerror *error;

NSURL*path =[NSURL URLWithString: @http://www.baidu.com;

NSString *str = [NSString stringWithContentOfFile:path encoding:NSUTF8StringEncoding error:error];

if(error ~= nil){

    NSLog(@"Error");

}

具体的使用实例如下图:

将字符串写入文件:

关于写入文件操作是否为原子性操作:

如果是原子性操作:在写入的过程中不会讲字符串的字符一个一个的写入文件,而是首先创建一个临时文件,想这个临时文件中一个一个的写入字符,

一旦所有的字符写入完毕,就将临时文件的内容一次性剪切到文件中;

如果不是原子性操作:在写入的过程中把字符一个一个的写入目标文件。

具体使用方法看代码:

接下来我们就要讲解关于字符串处理的基本方法,由于比较简单,我就不会太过于讲解我们主要看代码,还有就是代码中的注释,然后大家多看看多想想
多练练就基本没问题了:
首先是关于字符串的大小写的问题,主要介绍三个函数,他们的作用分为:将所有字符转换为大写,将所有字符转换为小写,将字符串的首字母大写其余
全部小写,OK看代码:

接下来我们介绍关于字符串的比较问题,主要三个方面:比较是否是同一个对象、两个字符串的内容是否相同、按字典顺序比较大小

下面介绍字符串内搜索函数:判断一个字符串是否为某个字符串开头或结尾、从前(后)搜索某一个字符串返回搜索到的第一个子串的所在的范围

下面我们介绍字符串的截取处理:从字符串开头截取至某个位置、从某个位置截取至字符串结尾、截取字符串的某个范围、以某个子串来来分割字符串:

最后我们来介绍关于可变字符串的使用,看代码

至此,关于OC字符串的基本使用方法已经介绍完毕。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值