暑期留校iOS学习笔记
8.12
nssting 是oc的类 每个字符串 则是这个类的对象 字符串对象的创建方法有两个
1 nssting *str =@“hello word ”这里表示 把hello word的地址赋给 str(地址)
2 nssting *str2=[nssring alloc ] initwithstring :str]; 用一个对象 创建另一个对象
3使用c的字符串创建对象
4stingwithformat 使用格式符 拼接成一个字符串
注意 ⚠ 利用2,3,4 alloc 创建的对象需要用 release 进行释放
1 nstring *str = [nstring stringwithuft8stirng:”hello word” ];
2 nstring *str = [nstring stringwithformat:@”hello word”,1 ];
3 nstring *str = [nstring stringwithstirng:”str” ];
以上三个是自动释放的 不需要写release
以上7种创建方式 都不能再修改
比较俩字符串是否相等 bool(返回值是bool类型) ret =[str isqualtostring:str2]
nslog(@“ %d”,ret) ret 为yes(1) 相等 ret 为 no (0)不相等
比较大小(返回值)nscommparisionresult ret =[str compare:str2];
如果str <str2 ret==nsorderedascending(-1)
如果str =str2 ret==nsorderedsame(0)
如果str >str2 ret==nsordereddescending(1)
nsrange
nsstring *str=@“i am a so bad man ”;
nsstring *substr=@“so”;
nsrang range=[str rangofstring:substr]
查找substr 是 str 中的位置在
然后通过range.location 和 range.length
位置 长度 调用查看
nssting *str =@“123456789”;
nssting *str2=[str substingtoindex:6];
从str 提取 一部分作为子字符串(原字符串不变,创建新的字符串) 以上就表示 从str中提取从头至第六个字符串(不包括第六个),生成新的字符串,返回字符串地址(注意是开区间)
nssting *str2=[str substingfromindex:6];
这个表示从str中从第六个(包括第六个)到最后一个字符生成新字符串,返回字符串地址闭区间
nsrange range ={3,4} ; 表示从第三个(位置)开始,(长度)有四个 (创建range)
nsstring *str4 =[str substrinngwithrange : range];
//这段表示 从str字符串的第三个开始截取长度为为四 作为新的字符串
//也可以 nsstring *str4 =[str substrinngwithrange : nsmakerange(3,4)];
以上均为 不可变的字符串自创建完后
可变字符串 nsmutalestring (增删改查)
nsmutablestring *str =[nsmutablestring alloc] init]; 创建空的字符串
然后 进行增加内容 [str setstring:@“hello”];
如果再来一次 [str setstring:@“world”]; 就会替换掉原来的
增:
可以进行追加
[str append string:@”123”]; 这是在 上面原有字符串的基础上world 进行追加123string类型,也可以[str append format:@“%c”,’a’]; 追加字符 可以追加很多类型
可以进行插入
[str insertstring:@“@@@”atindex:4]表示插入三个@在第四个位置开始插入
删
[str deletecharactersinrange:namakerang(3,5)];
表示从第三个开始 删除5个字符串(0123从0开始数)
改(替换)
[str replacecharactersinrange : nsmakerange(3,2)withstring@“*****************”];
把从第三个开始长度为2的字符串替换为***********
nsarray 数组 不可变数组
可变数组 mutablearray
数组的创建
nsarray *array=[[nsarray alloc] initwithobject:@“one”,@“two”,@“three”,nil]
数组的对象可以是任意的对象 数组中装的是元素的地址
打印数组就是打印数组的每一个元素 同理 打印对象就是打印对象的返回值 nslog(@“%@”,dog);数组也可以用%@打印 当打印的数组 不是一个单词时 就会加上双引号 “one one”
打印方法有
1枚举器法
nsenumerator * enumerator=[array objectenumerator];
id obj;
while()
2快速枚举法
for (id obj in array){
nslog(@“%@”,obj);
}
3使用i之遍历
nsuinteger length =[array count];
上诉是返回数组的元素个数
obj(对象)=[array objectatindex:2];
返回单个元素的地址 返回第二个元素的地址
也可以声明一个可变数组nsmutablearray *arry=[nsmutablearray alloc]init];
增加元素
[array add object:@“one”];
删除元素
[array remove object:@“one”];
如果一个程序里例如 @“one” @“one”两个字符串完全相同那吗所在的地址一样
指定第几个字符串的删除 [array removeobjectindex:1];⚠ 从零开始数
交换两个数组元素 [array exchangeobjectindex:0 withobjectindex:1];
使用枚举器法在正序遍历的时候不准许进行数组的修改,逆序就可以。
进行数组的 逆序输出,
例如 : 声明了一个字符串 nsstring *str =@“i am a bad man”;是以空格隔开的
然后利用 nsarray *array=[str componentseparatedbystring:@“ ”];以空格为单位 分为 每一个个元素,此时打印数组的话就会得到 i am a bad man 此时的数组不可变
连接数组中的每个元素连接也可以 ,用
nsstring *str =[array componentsjoinedbystring:@“ 空格”];每个元素中连接元为空格
category 能把一个类的实现分文若干个不同的文件中
每个category是类的一部分
类的不同类别可以单独编译(可以让不同的开发者负责一个category)
使用方便但是写起来比继承要复杂
如果把一个类category(申明与实现)放到一个.m文件中那么该category外界不能访问,这样实现了类似c++中的class的private
category实际上就是对类的拓展
category 的缺点可以团战函数消息不能拓展字段变量
命名规则
要拓展类名+拓展变量.[h/m]
比如
nsstring+reversestring.h
nsstring+reversestring.m
集合 nsset与nsarray 都是存的地址 nsset 存的 无序 是通过哈希表 散列算法查找其中的元素的
想要获取集合中的元素 [set count]
判断集合中是否拥有bool set=[set contains object:@“two”]
判断俩个集合是否相等bool set=[set isequalftoset:set2];
判断一个集合是否为另一个集合的子集bool set=[set issubsetofset:set2];
可以取出数组中的元素创建一个集合 数组的创建 nsarray *array=[[nsarray alloc]
initwithobject:@“one”,nil]