• 字符串数组和字典


    【字段的权限】

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

    @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];

  • 相关阅读:
    Gradle gitignore Gradle 模式 上传SVN 要忽略的文件
    加速Android Studio/Gradle构建
    JAVA unicode转换成中文
    进程与线程
    Flask快速入门
    tensorflow入门指南
    BP神经网络与Python实现
    文档数据库MongoDB
    Python虚拟环境virtualenv
    Python爬虫框架Scrapy
  • 原文地址:https://www.cnblogs.com/liudongyan/p/4395197.html
Copyright © 2020-2023  润新知