字符串数组和字典

【字段的权限】

【注】在类中声明字段,可以为字段添加权限

@private 私有权限

@protected 保护权限

@public 公有权限

@interface Father : NSObject

{

@private    //私有权限修饰的变量,不能被子类继承,不能被外部函数访问。

    int a;

@protected  //缺省权限 保护权限修饰的变量,可以被子类继承,不能被外部函数访问。

    int b;

    int c;

@public     //公有权限修饰的变量,可以被子类继承,可以被外部函数访问。

    int d;

}

@end

father->d = 9;

//保护成员,被继承了,仍然是保护成员

//公有成员,被继承了,仍然是公有成员

【注】

//实际工作中,根本不需要使用权限,都使用缺省的保护权限就可以了。

//如果你想要成员变量被外部函数访问,声明成属性。

//如果你想变量不被子类继承,不对外公开。声明在实现里。

@implementation Father

{

int x;

}

【方法的权限】

【注】

//OC中成员方法都是公有的,可以被继承,可以被外部方法访问。

//没有在接口中做声明的方法,这个方法不能被外部函数直接访问。

//通过不声明(或者仅在匿名类别中声明),我们模拟了私有方法,这个过程,有时被称为方法的私有化。

【注】下面情况,方法私有化不成功

1.父类公有的方法,子类重写,即使子类不声明,方法也是公有的。

2.在协议中声明的方法,遵从协议的对象,即使不声明,只实现,方法也是公有的

【另】方法的私有化,声明即外露,不声明即不外露,本没什么可记的。但是面试经常会被问到:OC能实现私有方法吗?可照上述方式回答。

【字符串】

【注】OC的程序,依托于基础类库Foundation.Foundation框架提供了很多官方类,其中有三个基础的数据结构。

【字符串】【数组】【字典】

堆中字符串    链表       哈希表

【注】OC兼容C的字符串,但是OC有自己的字符串,是一个类。声明的对象,既能存储一串字符,又能通过一些方法,管理存储的字符。

【另】OC程序乃至iOS程序中,所有的字符串管理,都交给这个类完成。

一.NSString(NextStep-> Cocoa)

二.字符串的常用方法

//字符串转其他类型数据

int ret = [str1 intValue];

    long long ret2 = [str1 longLongValue];

    double ret3 = [str1 doubleValue];

    NSInteger ret4 = [str1 integerValue];

1.返回字符串的长度

NSUInteger len = [str length];

2.返回单个字符

unichar c = [str characterAtIndex:3];

3.比较两个字符串的大小关系

BOOL ret = [str1 isEqualToString:str2];

NSComparisonResult ret2 = [str1 compare:str2];

4.查找子串的位置和范围

NSRange range = [str rangeOfString:@"粉刷"];

5.子串的提取

NSString * subStr1 = [str substringToIndex:5];

//开区间

NSString * subStr2 = [str substringFromIndex:5];

//闭区间

NSString * subStr3 = [str substringWithRange:range];

//提取字符串

//NSString不可修改,因此这里并不是截断字符串,只是取出原字符串的一部分,创建一个新的字符串,新字符串是原字符串的一部分,称为原字符串的字串

四.可变字符串

NSMutableString 继承自 NSString

1.凡是NSString的方法,NSMutableString都能用

2.凡是传参需要传入NSString * 传入NSMutableString *也行

【专有方法】

1.重置字符串内容

[str setString:@"0123456789"];

2.增 append  insert

[str appendString:@"9876543210"];  追加

[str appendFormat:@"%d %c %.2f", 34, 'T', 2.34];

[str insertString:@"ABC" atIndex:3];

[str insertString:[NSString stringWithFormat:@“%.2f”,3.14] atIndex:3];

3.删 delete

[str deleteCharactersInRange:range];

4.改 replace

[str replaceCharactersInRange:range withString:@"XXXXXXXXXXXXXXX"];

//替换之前的字符串个数和替换之后的个数,长度可以不同。因为可变字符串是堆空间的对象,堆空间的大小可在运行时改变。

5.查 rangeOfString:

【数组】

//OC的数组用于存储对象的地址,结构更接近于C中的链表。

//OC使用C的数组存储大量的基础数据类型,OC的数组对象存储多个对象(地址)

//OC的数组类有两个

NSArray(数组) NSMutableArray(可变数组)

//作用管理大量的对象数据。

一.NSArray

【创建数组对象】

NSArray * array = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", dog, nil];

//构造方法的参数是任意对象的地址,不局限字符串。

//每个对象可以是不同类的对象。

//nil就是NULL NULL表示一般指针为空,nil表示对象指针为空。

//数组中只存储每个对象的地址,并不真的存储对象。

//所以,一个对象经常被添加到多个数组中,但还是一个对象。

//类似 void * array[n];

//用initWithObjects需要在末尾添加nil

//%@是打印任何对象

NSArray * array2 = @[@"One One", @"Two", @"Three", dog];

//Xcode 4.6 以后才能用

//打印数组,就是打印数组的每个元素

NSLog(@"%@", array);

【遍历数组】

//找出数组中元素个数

NSUInteger cnt = [array count];

//找到某个元素,返回某个元素的地址。

NSString * obj = [array objectAtIndex:1];

obj = array[1];

//xcode 4.6 以后

//直接打印数组不支持中文,先取出后打印支持中文

//id表示指向任何类型的指针,即泛型对象指针

//快速枚举法

for(id obj in array){

//循环的第一次obj指向数组第0个元素,第二次指向数组第1个元素。遍历结束后,会自动退出

NSLog(@“%@“,obj);}

//如果使用快速枚举法,则遍历过程中,不得修改数组元素个数和元素的顺序

【详见day3-数组-2】

//判断一个对象是否属于某个类

[obj isKindOfClass:[DeathKnight class]] == YES;

【常用方法】

//返回某个对象的位置(索引)

NSUInteger index = [array indexOfObject:dk2];

二.可变数组

//NSMutableArray : NSArray

//凡是NSArray的方法,NSMutableArray都能用。

//凡是传参传NSArray*,也可以传NSMutableArray*

//重置内容

[array setArray:@[@"One", @"Two"]];

//

//追加

[array addObject:@"Four"];

//插入

[array insertObject:@"Four" atIndex:1];

//

[array removeAllObjects];

[array removeLastObject];

//删除指定索引处元素

[array removeObjectAtIndex:1];

[array addObject:@"One"];

//传入地址,删除指定元素,如果传入的是字符串,删除所有和字符串相等的元素。

[array removeObject:@"One"];

//删除指定的对象,如果对象是一般对象,则需传入你想删除的对象的地址。如果对象是字符串,则只需传入跟你想删除的字符串相等的字符串即可

//

//用某个对象,替换当前某索引处的元素

[array replaceObjectAtIndex:0 withObject:@"Five"];

//交换两个元素的位置

[array exchangeObjectAtIndex:0 withObjectAtIndex:2];

三.字符串分割

【字典】

//NSDictionary 和 NSMutableDictionary

//NSMutableDictionary : NSDictionary

//两个凡是

一.NSDictionary

//创建字典对象

//字典中的数据以键值对的形式存储

//@"One”是键值对的值(value), @“1”是键值对的键(key)

//字典的值是任意对象,键一般使用字符串

//字典的目的是通过键找到值。键是手段,值是目的。值是需要存储的数据,键仅仅是查找数据的索引

//字典采用哈希表存储数据,因此查找速度快,没有顺序,不存在第一键值对,第二键值对

//通过键计算一个哈希值,比如5,则将对应的值的地址存在哈希表的第5个格子里

//OC的字典不允许两个键值对拥有相同的键

//字典和数组一样,只储存对象的地址,不储存对象本身

NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", @"One"@"4", nil];

NSDictionary * dict2 = @{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"};

//通过传入键,返回值的地址

NSString * value = [dict objectForKey:@"3"];

value = dict[@"3"];

//Xcode 4.6 以后

//如果没有对应的键,返回nil

//返回键值对总数

NSUInteger count = [dict count];

//返回所有的键

NSArray * keys = [dict allKeys];

//返回所有的值

NSArray * values = [dict allValues];

二.可变字典

//重置字典

[mutableDict setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"}];

       

//

[mutableDict setObject:@"Four" forKey:@"4"];

       

//

//通过键删除值

[mutableDict removeObjectForKey:@"3"];

//通过多个键,删除多个值

[mutableDict removeObjectsForKeys:@[@"1", @"2", @"3"]];

//删除所有键值对

[mutableDict removeAllObjects];

原文地址:https://www.cnblogs.com/liudongyan/p/4395197.html