iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray

NSArray :不可变数组

NSMutableArray : 可变数组

C语言数组:存放基本数据类型

OC数组:只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

1.不可变数组的创建

void create()
{
    /*
     int a = 5;
     int ages[10] = {1, 90, 89, 17};         //  C数组   

     Person *p = [[Person alloc] init];       // OC数组(下面)
     Person *persons[5] = {p,  [[Person alloc] init]};
     */

    // OC数组不能存放nil值
    // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

    // 这个array永远是空数组
    // NSArray *array = [NSArray array];

    /*
     1.NSArray的创建
     */
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];

    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];

    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];

    // 快速创建一个NSArray对象(这种方法只用于创建不可变数组)
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];

    /*
     2.NSArray的元素个数
     */
    NSLog(@"%ld", array3.count);

    /*
     3.NSArray中元素的访问
     */
    NSLog(@"%@", [array3 objectAtIndex:1]);

    //array3[1];
    NSLog(@"%@", array3[0]);
}

2.不可变数组的遍历

// 遍历数组
void use1()
{
    Person *p = [[Person alloc] init];

    NSArray *array = @[p, @"rose", @"jack"];

// 方法1(通过下标)

    //    for (int i = 0; i<array.count; i++)
    //    {
    //        NSLog(@"%@", array[i]);
    //    }

 // 方法2  (for in 结构)  --推荐使用

    // id obj代表着数组中的每一个元素
    //int i = 0;
    //    for (id obj in array)
    //    {
    //        // 找出obj元素在数组中的位置
    //        NSUInteger i = [array indexOfObject:obj];
    //
    //        NSLog(@"%ld - %@", i, obj);
    //        //i++;
    //
    //        if (i==1)
    //        {
    //            break;
    //        }
    //    }

// 方法3:Block  --推荐使用
    // 每遍历到一个元素,就会调用一次block
    // 并且当前元素和索引位置当做参数传给block

    [array enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);

         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }

     }];

//  上面block的本质
    //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
    //    {
    //        NSLog(@"%ld - %@", idx, obj);
    //
    //
    //        if (idx == 0)
    //        {
    //            // 停止遍历
    //            *stop = YES;
    //        }
    //    };
    //
    //    for (int i = 0; i<array.count; i++)
    //    {
    //        // 用来标记是否需要停止遍历
    //        BOOL isStop = NO;
    //
    //        // 取出元素
    //        id obj = array[i];
    //
    //        myblock(obj, i, &isStop);
    //
    //
    //        if (isStop)
    //        {
    //            break;
    //        }
    //    }

}

3.不可变数组的使用

void use2()
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

    // 添加元素
    [array addObject:[[Person alloc] init]];

    [array addObject:@"jack"];

    // 删除元素
    //[array removeAllObjects];
    // 删除指定的对象
    // [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];

    // 错误写法
    // [array addObject:nil];

    NSLog(@"%@", array);

    NSLog(@"%ld", array.count);
}

4.可变数组

NSMutableArray它的使用基本和不可变数组类似----具体参照文档,那里面的很多方法,文档的说明才是王道。

注意:

int main()
{
    // @[] 只创建不可变数组NSArray

 /* 错误写法
    NSMutableArray *array = @[@"jack", @"rose"];

    [array addObject:@"jim"];
  */

    // NSArray *array = @[@"jack", @"rose"];

    return 0;
}
时间: 2024-08-23 03:26:56

iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray的相关文章

iOS开发之oc(八)--小知识补充 init方法补充

小知识补充 一. id 1. 简介 万能指针,能指向任何OC对象,相当于NSObject * id类型的定义 typedef struct objc_object { Class isa; } *id; 2. 使用 // 注意:id后面不要加上* id p = [Person new]; 3. 局限性 调用一个不存在的方法,编译器会马上报错 二. .h和.m文件的抽取 1)每个类分布在不同文件中 2)类的声明放在.h文件,类的实现放在.m文件 3)若想使用某个类,就包含某个类的.h声明文件 三.

ios开发之OC基础-类和对象

本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来.这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写.改写代码.在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路. 一定要明确一个要从事的方向,要不然就会感到迷茫.学习ios开发,并且从事ios开发这个行业,这就是我的选择.看到我的博客系列文章,其中大

iOS开发之oc(二十二)--Foundation(7)NSValue、NSDate

NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue (一)NSValue值转换 #import <Foundation/Foundation.h> int main() { // 结构体--->OC对象 CGPoint p = CGPointMake(10, 10); // 将结构体转为Value对象 NSValue *value = [NSValue valueWithPoint:p]; // 将value转为对应的结构体 // [value pointValu

iOS开发之oc(十九)--Foundation(4) NSSet

NSSet作用:存放的是没有顺序的对象 NSSet和NSArray的对比 1> 共同点 •都是集合,都能存放多个OC对象 • 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int.char.float等,结构体,枚举) •本身都不可变,都有一个可变的子类 2> 不同点 •NSArray有顺序,NSSet没有顺序 代码示例 #import <Foundation/Foundation.h> int main() { NSMutableSet *s = [NSMutableS

iOS开发之oc(二十)--Foundation(5)NSDictionary

/*  集合  1.NSArray\NSMutableArray •有序 •快速创建(不可变):@[obj1, obj2, obj3] •快速访问元素:数组名[i]   2.NSSet\NSMutableSet •无序  3.NSDictionary\NSMutableDictionary •无序 •快速创建(不可变):@{key1 : value1,  key2 : value2} •快速访问元素:字典名[key] */ NSDictionary:字典 代码示例 1> void create(

iOS开发之oc(十六)--Foundation(1)结构体

(一)要掌握这些的运用 NSRange(location length) ---范围                                    range:范围 NSPoint\(相当于)CGPoint ---点 NSSize\CGSize   ---尺寸 NSRect\CGRect (CGPint CGSize) ---相当于一个矩形 其实,看官方文档更能清楚,这些的用法,需要声明方法就Jump to去看,在此,仅仅列出简单用法,作为了解 (二)代码示例 1. void range

iOS开发之oc(十七)--Foundation(2)NSString及简单的字符串读取和写入

NSString : 不可变字符串 NSMutableString : 可变字符串 // 重点注意:URL不能读取文件名为中文的文件,否则为null,读不出来,要换为英文 // URL读取文件才是万能 下面是一些功能的代码 1.创建和读取 void stringCreate() { /* 1.字符串的创建的方法 */ NSString *s1 = @"jack"; //NSString *s2 = [[NSString alloc] initWithString:@"jack

iOS开发之oc(十二)--内存管理ARC

(一)自动内存管理 --ARC 1>简单点说就是让编译器完成堆空间的引用计数的加减,自动释放,程序员不再写retain 和release等方法 2>OC的自动内存管理不同于java 的垃圾回收,而是在预处理是直接在应该保留的地方加上retain,在应该改释放的地方加上release,是直接添加代码 3>从效率上讲,ARC优于手动内存管理 2.1.1 ARC 的局限性 1>使用ARC可能因为代码的不规范,导致内存提前释放 2>导入第三方库,或者导入旧代码,这些代码不支持ARC

iOS开发之oc(二十一)--Foundation(6)NSNumbe

NSNumber 作用:可以将基本数据类型转化为对象,致使其能在数组.字典中使用 代码示例 1. void use() { // NSNumber基本使用 // 1. 把基本数据类型转化成对象 NSNumber *num = [NSNumber numberWithInt:10]; NSDictionary *dic = @{ @"name": @"Rose", @"age": num}; NSNumber *num1 = dic[@"