IOS知识点总结 一 (NSString)

objective-c中用NSString的有关注意事项:

一:声明NSString类型的属性格式


//属性声明为copy,是为传入的参数若是NSMutableString类型的数据做copy处理,使外界参数的改变不影响属性的值。

1 @property (nonatomic,copy) NSString *str;

二:NSString创建

//方法一 str1指针变量指向内存中 文字常量区 的 @"abc" 这个地址。
NSString *str1=@"abc";

//方法二 虽然用得是alloc方法,但并不是在内存的堆区申请内存,而是在 文字常量区 申请内存。
NSString *str2=[[NSString alloc] initWithString:@"abc"];

//方法三(方法三 和 方法一 在Xcode中被认为是等效的,如果写第三种方法,则Xcode会建议写成第一种方法)
 NSString *str3=[NSString stringWithString:@"abc"];

//方法四虽没有alloc,但系统会在 堆区 申请内存,引用计数初始化为1.
 NSString *str4=[NSString stringWithFormat:@"abc"];

//方法五用alloc方法,在 堆区 申请内存,引用计数初始化为1.
 NSString *str5=[[NSString alloc] initWithFormat:@"abc"];

1.在 文字常量区 的地址分配规则:只要值相等,则共用相同的内存区域,那么str1和str2的内存地址是一样的。

2.在 文字常量区 的字符串的 retainCount 被设置为一个非常大得数,所以对处在文字常量区的字符串变量进行 retain 或 release 操作都等同于无效,

这些字符串常量在程序运行过程中一直存在,当程序结束时统一由系统回收管理。

3.str4 和 str5都是在堆区申请内存,只要是在堆区申请的内存,就会有引用计数,两种方法初始化的retainCount都设置为1,虽然两个方法的值都是@"abc",但方法四和方法五在堆区的内存地址是不一样的,即str4和str5是堆区的两块内存区域。

三:NSString的copy和mutableCopy机制

1.不可变字符串的两种copy方式

1 //源字符串
2 NSString *str1=@"abc";
3
4 //不可变复制,str2和str1都指向 常量区 的@"abc"字符串,str2等同于str1
5 NSString *str2=[str1 copy];
6
7 //可变的复制,此方法在堆区申请内存,复制str1的值。有引用计数,但str3是不可变字符串。
8 NSString *str3=[str1 mutableCopy];

2.可变字符串的两种copy方式

//源字符串,创建于堆区
NSMutableString *str1=[NSMutableString string];
[str1 appendString:@"abc"];

//不可变复制
NSString *str2=[str1 copy];

//可变的复制
NSString *str3=[str2 mutableCopy];

str1,str2和str3都在堆区,都有引用计数,retainCount的值为1。

str2和str3都是不可变的字符串。

四:NSString和c字符串的转换

在源代码中NSString字符串是以@开头的,如:@"abc"

在objective-c中c的字符串直接就是引号:"abc"

1.c串 => NSString串 代码示例:

1 //c字符串
2 char *s="abc";
3
4 //用类方法转换
5 NSString *str=[NSString stringWithCString:s encoding:NSUTF8StringEncoding];
6
7 //用初始化方法转换
8 NSString *str1=[[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];

两种方法转换的NSString都创建在 堆区 ,都有引用计数。

2.NSString串 => c串 代码示例:

//源字符串
NSString *str=@"abc";

//方法一
const char *s1=[str UTF8String];

//方法二
const char *s2=[str cStringUsingEncoding:NSUTF8StringEncoding];

两种方法的返回值的设定必须是const char * 类型的。

五:字符串和数组的转换

1.字符串转换为数组

//字符串
NSString *data=@"15,13,18,9,23";

//数组
NSArray *temp=[data componentsSeparatedByString:@","];

2.数组转换为字符串

//数组
NSArray *[email protected][@"1",@"2",@"3"];

//字符串
NSString *str=[arr componentsJoinedByString:@","];

六:字符串的比较

NSString *str1=nil;
NSString *str2=@"this is a string";

//比较时必须判断消息的接受者是否为nil
if (str1 && [str1 compare:str2] == NSOrderSame)
{
  NSLog(@"相等");
}
时间: 2024-07-28 19:26:00

IOS知识点总结 一 (NSString)的相关文章

iOS知识点大纲

Xcode使用 1. 创建UI工程 基本控件 2. UILabel标签 3. UIButton按钮 项目: 计算器项目 4. UIImageView(UIImage)   项目: 人人界面 5. UIView 视图+触摸   项目: 人人界面 6. UITextField输入框/电子词典 7. iOS常用控件 8. 手势操作 视图控制器和多视图程序 9. UIViewController 10.UINavigationController 项目: 人人界面模拟 11. UITabBarContr

iOS 知识点梳理

OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装.继承.多态.它既具有静态语言的特性(如C++),又有动态语言的效率(动态绑定.动态加载等).总体来讲,OC确实是一门不错的编程语言, Objective-C具有相当多的动态特性,表现为三方面:动态类型(Dynamic typing).动态绑定(Dynamic binding)和动态加载(Dynamic loading).动态——必须到运行时(run time)才会做的一些事情. 动态类型:即运行时再决定对象的类型,这

iOS解决NSData转NSString后字符为空

iOS中,将NSData转NSString的一般方法为[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];但是当data中包含00时,所获得的新字符就会为nil,这时我们应该这样转 [NSString stringWithUTF8String:[data bytes]];

iOS知识点-总结

1.#import和#include的区别 @class? @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import 而#import比起#include的好处就是不会引起交叉编译 2. readwrite,readonly,assign,retain,copy,nonatomic 属性的作用 @property是 一个属性访问声明,扩号内支持以下几个属性: 1,getter=getName,setter=setName,设置setter与 get

iOS知识点集合

一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.怎样防止指针的越界使用问题? 答案: 1 .防止数组越界,必须让指针指向一个有效的内存地址, 2. 防止向一块内存中拷贝过多的内容 3. 防止使用空指针 4 .防止改变const修改的指针 5. 防止改变指向静态存储区的内容 6. 防止两次释放一个指针 7. 防止使用野指针. 2.http请求方式有哪些? 答案: 1)GET 2)HEAD 3)PUT 4)DELETE 5)POST 6)OPTIONS 3.uivi

iOS中的字符串NSString

创建一个字符串对象: NSstring * str1 = @"hello world"; NSString * str = [[NSString alloc]initWithString:@"hello world!"]; NSString * str_1 = [[NSString alloc]initWithUTF8String:"hello world"];//把C的字符串转化为OC的字符串 int a = 123; NSString * s

iOS知识点全梳理-备用

感谢大神分享 文/Jack_lin(简书作者)原文链接:http://www.jianshu.com/p/5d2163640e26著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡.矫情一下,言归正传,我奉献一下,为iOS应聘者梳理一下面试题,希望能助一臂之力! OC的理解与特性

ios知识点

  1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIResponder的类才能响应touch事件,从上图的响应者链可以看出,优先是最上层的view响应事件,如果该view有视图控制器的话会是下一个响应者,否者就是该view的父视图,这样至上而下传递事件.直到单例UIWindow对象,最后是单例UIApplication对象以终止,UIApplication的下一个响应者是nil,已结束整个响应循环.事件在传递过程中视图可以决定是否需要对

iOS知识点、面试题 之三

最近面试,发现这些题个人约到的几率打一些,与大家分享一下,分三文给大家: 当然Xcode新版本区别,以及iOS新特性 Xcode8 和iOS 10 在之前文章有发过,感兴趣的可以查阅: http://www.cnblogs.com/xujiahui/p/6025830.html 不足之处望见谅. 之三: 1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringE