QF——OC数组

OC中的数组:

OC中的数组和它的字符串有很多相似之处。也分为可变和不可变。

NSArray:不可变数组,一经初始化,便不能再更改;

NSMutableArray:可变数组,它其实是继承于NSArray,所以NSArray的方法它都可以用,只不过又拓展了些数组自己操作的方法。

OC数组的初始化:

        //NSArray:不可变数组

        //NSArray的实例化方法:
        //对象方法:
        NSArray * arr1 = [[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil]; //末尾的nil表示结束符
        NSArray * arr2 = [[NSArray alloc]initWithArray:arr1]; //通过已存在的数组实例化新数组

        //类方法:
        NSArray * arr3 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
        NSArray * arr4 = [NSArray arrayWithArray:arr3];

        //Xcode新版本的便捷方法:
        NSArray * arr5 = @[@"one",@"two",@"three"];  //类似于NSString * str = @"wanger";且此时数组结尾无nil!

OC数组的一些常用方法:

        //NSArray常用方法:
        NSArray *arr = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];

        //求元素个数:count
        NSUInteger count = [arr count];
        NSLog(@"count = %lu",count);

        //获取某位置元素
        id obj = [arr objectAtIndex:2];
        NSLog(@"%@",obj);
        //其实这个方法很鸡肋。arr[index]效果一样
        NSLog(@"%@",arr[2]);

        //获取某元素的索引
        NSInteger index = [arr indexOfObject:@"one"];
        NSLog(@"index = %lu",index);

        //判断该数组是否包含某元素
        BOOL tag = [arr containsObject:@"two"];
        if(tag==YES)
        {
            NSLog(@"嗯,包含了。");
        }else if (tag==NO)
        {
            NSLog(@"没包含。");
        }

        //获取数组最后一个元素
        id obj2 = [arr lastObject];
        NSLog(@"lastObject为 %@",obj2);

        //将数组各元素连接成字符串对象
        NSString *str = [arr componentsJoinedByString:@"+"];
        NSLog(@"%@",str);

       //将字符串通过分隔符转换成数组
        NSString * str1 = @"welcome to shenzhen";
        NSArray *arr1 = [str1 componentsSeparatedByString:@" "];
        NSLog(@"%lu",[arr1 count]);

        NSString *str2 = @"Hi,wang.weclome";
        id seqSet = [NSCharacterSet characterSetWithCharactersInString:@",."];
        NSArray *arr2 = [str2 componentsSeparatedByCharactersInSet:seqSet];
        NSLog(@"%lu",[arr2 count]);
        NSLog(@"%@",arr2);

        NSString *str3 = @"yes i am a bad body";
        NSArray *arr3 = [str3 componentsSeparatedByString:@" "];
        int i;
        NSMutableString *mStr = [NSMutableString stringWithUTF8String:""];
        for (i=(int)[arr3 count]-1; i>=0; i--)
        {
            [mStr appendString:arr3[i]];
            [mStr appendString:@" "];
        }
        NSLog(@"%@",mStr);

OC遍历数组的3种方法:

第3种要重点掌握!

        //数组遍历
        NSArray *arr1 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
        //1.最基本原始方法:for循环

        //2.迭代器
        NSEnumerator *erator = [arr1 objectEnumerator];

        id obj;
        while ((obj=[erator nextObject])!=nil)
        {
            NSLog(@"%@",obj);
        }

        //3.增强型for循环
        //for(对象类型 对象名 in 列表)
        //优点:不需要开发者判断结束条件,自动结束
        for (id obj in arr1)
        {
            NSLog(@"%@",obj);
        }
时间: 2024-10-10 22:38:49

QF——OC数组的相关文章

OC - 数组、字典、集合

数组是一个有序的集合,OC中的数组只能存储对象类型,对于对象的类型是没有限制的 NSArray:不可变数组 :对象创建好以后,数组中的元素个数不能发生变化 NSSMutableArray : 可变数组 : 对象创建好以后,数组中的元素可以灵活进行增删改操作 NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @123, @"monkey", nil]; 注意 : nil作为数组存放元素的结束标志,多

OC数组

同OC字符串 包括NSArray不可变数组和NSMutableArray可变数组,前者是后者的父类 Object为单数的方法,代表某个元素 Objects为复数的方法,代表多个元素 以C语言风格创建一个数组: NSArray *a1 = @[@"a", @"b", @"c", @"d", @"e", @"f"]; 不以中括号[]包括而独立存在的数组值,结尾处要添加nil 使用数组方法时注

OC数组中的深拷贝

浅拷贝与深拷贝 首先回顾下,浅拷贝:即指针拷贝,源对象和新对象指向的是同一个地址,也就是说浅拷贝要复出出来一个新的文件,但两个文件的地址还是一个.浅拷贝的话是只有不可变数组(如:NSArray,NSSet,NS字典)遇上copy,才是浅拷贝,剩下的都是深拷贝. 例如: Dog * dog1 = [Dog new]; // 这里就是浅拷贝,即指针拷贝 Dog * dog2 = dog1; 而深拷贝,自己定义的类一般需要遵循 NSCopying, NSMutableCopying 协议,例如 Dog

QF——OC字符串

OC中的字符串: C中没有字符串类型,用字符数组和指针代替. OC中引入了字符串类型,它包括NSString 和 NSMutableString两种 NSString是不可变的,已经初始化便不能更改:NSMutableString是可变的,可以对自己进行修改操作的.这类似于Java里的String和BufferString. NSString字符串的初始化方法: //通过对象方法(动态方法) NSString * str1 = [[NSString alloc]initWithUTF8Strin

oc 数组

#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { //固定数组 NSArray *[email protected][@"Hello",@"Netcorner"]; for(int i=0;i<[arr count];i++){ NSLog(@"%@",[arr objectAtIndex:i

OC 数组方法介绍

NSArray 是不可变的数组,只能够存放对象,但是可以存放不同类型的对象 首先定义一个类 #import <Foundation/Foundation.h> @interface Person : NSObject @property NSString *name; - (id)initWithName:(NSString *)name; @end #import "Person.h" @implementation Person - (id)initWithName:(

QF——OC的多态,动态绑定及实现原理

多态: 封装,继承,多态是面向对象的三大特征. 那多态到底是什么呢? 多态:允许不同的类定义相同的方法,OC能自己判断,不会混乱. 动态类型:程序直到运行时才知道对象所属的类. 动态绑定:基于动态类型,程序直到运行时才能确定要执行的方法. 多态:父类的指针可以指向子类的对象.这句话一定要深刻理解,请看几行代码: Animal * obj = [[Dog alloc] init]; [obj eat]; 虽然该obj前面是Animal类,也就是说它被声明是Animal类的一个指针,但是在运行 [o

oc数组遍历

#import <Foundation/Foundation.h> //数组遍历(枚举)对集合中的元素依此不重复的进行遍历 int main(int argc, const char * argv[]) { @autoreleasepool { NSArray *[email protected][@"MON",@"TUE",@"WED",@"THU",@"FRI",@"SAT&quo

QF——OC中把方法当做参数传递的两种形式(@selector和block)

@selector(): 可以理解@selector()就是取类方法的编号,他的基本行为等同于C语言中的函数指针(指向函数的指针).它们通过传递方法的地址(或编号)来实现把方法当做参数的效果. 不过在C语言中,可以直接把一个函数名赋给一个函数指针,但是在OC中不行,而是要通过@selector语法来取.它的括号里传入的是方法名,返回结果是 SEL类型,该类型本质上就是方法的编号(地址). block: block,名为代码块.它和函数很相似,有返回值,有名称,有参数列表. 格式: 返回值类型 (