NSArray使用方法,数组遍历的几种方法,迭代器的用法

LSCM最小二乘保角参数化 LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s 阅读详情

NSArray:

只允许装OC对象,并且不能装空值,空代表数组元素的结束
//创建一个空数组
NSArray *array = [NSArray array];
//创建有一个元素的数组
array = [NSArray arrayWithObject:@"123"];
//创建有 多个元素的数组
array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能装nil空值,空值代表数组元素结束
//获取元素的个数
int count = [array count]; //和 count = array.count; 相同,都是调用get方法
//是否包含一个元素
- (bool) containsObject:(id)anObject;
返回最后一个元素
- (id) lasObject;
//获取index位置的元素
- (id) objectAtIndex:(NSUInteger) index;
//获取元素的位置
- (NSUInteger) indexOfObject:(id)anObject;
//在range范围内查找元素的位置
- (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range;
//比较两个集合内容是否相同
- (Bool) isEqualToArray:(NSArray *)otherArray;
//返回两个集合中第一个相同的对象元素
- (id) firstObjectCommonWithArray:(NSArray *)otherArray;
//让集合里面的所有元素都执行aSelector这个方法
- (void) makeObjectsPerformSelector:(SEL)aSelector;
//让集合里面的所有元素都执行aSelector这个方法,给这个方法添加参数,但是只支持一个参数
- (void) makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument

NSArray:
//添加一个元素,返回一个新的数组(方法调用者本身没有发生变化)
- (NSArray *) arrayByAddingObject:(id)anObject
//添加otherArray的所有元素,返回一个新的NSArray(方法着本身没有改变)
- (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray;
//截取range范围的数组
- (NSArray *) subarrayWithRange:(NSRenge)range;
//用separator做拼接符,拼接成一个字符串
- (NSString *) componentsJoinedByString:(NSString *)separator
//将NSArray持久化到文件中去
- (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile

 

数组的内存管理;
如果把一个对象放到一个数组里面,改对象的计数器加一。也就是说数组会对他做一次retain操作
数组被销毁([array ralease])的时,会对内部所有的元素都做一次release操作
代码如下:

void * :d代表指向任何类型的指针

数组遍历:

方法一:普通遍历

方法二:快速遍历

方法三:利用block遍历

方法四:利用迭代器

NSEnumerator迭代器:
集合的迭代器,可以用于遍历集合元素
NSArray 有相应的方法来获取迭代器
//获取一个正序遍历的迭代器
- (NSEnumerator *) objectEnumerator;
//获取一个反序遍历的迭代器
- (NSEnumerator *) reverseObjectEnumerator;

NSEnumerator的常用方法:
//获取下一个元素
- (id) nextObject;
//获取所有的元素
- (NSArray *) allObjects

demo代码如下:
Student.h文件内容:

#import <Foundation/Foundation.h>

@interface Student : NSObject
+ (id)student;
- (void)test;
- (void)test2:(NSString *)str;
@end

Student.m文件内容:
#import "Student.h"

@implementation Student
+ (id)student{
    return  [[[Student alloc] init] autorelease];
}
-(void) test{
    NSLog(@"%@ ->test",self);
}
-(void)test2:(NSString *)str{
    NSLog(@"%@->test2 %@",self, str);
}
- (void)dealloc{
    NSLog(@"%@ is destoryed", self);
    [super dealloc];
}
@end


void arrayCreate(){
    //create a null array
  //  NSArray *array = [NSArray array];
   
}

void arrayUse(){
    NSObject *obj = [[NSObject alloc] init];
    NSLog(@"obj:%@",obj);
    NSArray *array = [NSArray arrayWithObjects:@"a", @"b",@"c", obj, nil];
   
    NSString *last = [array lastObject];
    NSLog(@"last :%@",last);
   
    [obj release];
}
#pragma mark memory manager 数组的内存管理
void arrayMemory(){
    Student *stu1 = [[Student alloc] init];
    Student *stu2 = [[Student alloc] init];
    Student *stu3 = [[Student alloc] init];

    NSLog(@"stu1:%zi",[stu1 retainCount]); //1
    NSArray *array = [[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];
   
    NSLog(@"stu1:%zi",[stu1 retainCount]);//2
   
    NSLog(@"array count: %zi",[array count]);
   
    [array release];
    [stu1 release];
    [stu2 release];
    [stu3 release];
   
}
#pragma mark 给数组里的元素 发送消息
void arrayMessage(){
    Student *stu1 = [Student student];
    Student *stu2 = [Student student];
    Student *stu3 = [Student student];
   
    NSArray *array = [[NSArray alloc] initWithObjects:stu1,stu2,stu3, nil];

   // [array makeObjectsPerformSelector:@selector(test)];
    //有参数,但是参数只能有一个
    [array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
   
    [array  release];
}

#pragma mark 普通遍历
void arrayFor1(){
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    int count = array.count;
    for(int i=0; i<count; i++){
        id obj = [array objectAtIndex:i];
        NSLog(@"%i-%@",i, obj);
    }
}

#pragma mark  快速遍历
void arrayFor2(){
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    int count = array.count;
    int i=0;
    for(id obj in array){
        NSLog(@"%i-%@",i, obj);
        i++;
    }
}

#pragma mark  利用block遍历
void arrayFor3(){
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%zi->%@",idx, obj);
      //  *stop = YES; //改变外边的Bool,终止遍历
    }];
}
#pragma mark 利用迭代器
void arrayFor4(){
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    NSEnumerator *enumerator = [array objectEnumerator];
    //如果放到遍历之后,则取到空,原因是,遍历完了,就没值了
    NSArray *array2 = [enumerator allObjects];
    NSLog(@"array2:%@", array2);
   
    //获取下一个需要遍历的元素
    id obj = nil;
    while (obj = [enumerator nextObject]) {
        NSLog(@"obj=%@", obj);
    }
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSLog(@"------array create--------");
        arrayCreate();
        NSLog(@"------array use-----------");
        arrayUse();
        NSLog(@"------array memory manager----");
        arrayMemory();
      
        NSLog(@"------array message----------");
        arrayMessage();
        NSLog(@"------array for---------");
        arrayFor1();
        NSLog(@"------array for2--------");
        arrayFor2();
        NSLog(@"------array for3---------");
        arrayFor3();
        NSLog(@"------array for4---------");
        arrayFor4();
    }
    return 0;
}

【Dumper-7】入门指南 - 带你领略不一样的UE世界 摘要: Dumper-7是一款用于分析UE4/UE5游戏的逆向工具,可自动生成游戏内部结构的C++ SDK。支持Visual Studio、CMake和Xmake三种构建方式,通过DLL注入目标游戏后,自动识别引擎结构并输出C++ SDK文件(默认保存在C:\Dumper-7目录)。该工具适用于游戏Mod开发、安全研究和机制分析,提供完整的类层次映射、属性/函数识别功能。使用时需注意x64平台配置,生成SDK后可集成到自定义DLL项目中,通过示例代码展示如何查找游戏对象、访问世界状态和调用引擎函数。 阅读详情

相关推荐

超详细网安学习路线(Day1-Day2)

渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。简单来说,就是合法去入侵别人的系统,来帮助其找出漏洞,增强防护能力。

aobulaien001的博客 3389

NSArray简介

数组是一个集合类,是有序的,可以根据编制的索引找到想要的结果。OC数组只能存储对象(如字符串、数组、字典等),不能存储基本数据类型(如int,float,char),也不能存储nil。分为不可变数组(NSArray)和不可变数组(NSMutableArray)。不可变数组一经创建就不能对其内容进行操作。本篇文章只介绍NSArray的一些简单用法。NSMutableArray继承自NSArray。 ...

zhaoName的博客 2223

手眼标定搞定了,手眼矩阵不知道怎么用?快戳!!

手眼标定得到手眼矩阵到底该咋用? 大家好,我是小鱼。上几期给大家分享了关于手眼标定的方法,如果还有不清楚如何让进行手眼标定的同学可以参考下面的文章: 机器人手眼标定都能搞不定?快戳,最好用的手眼标定库!!! 很多同学做完了手眼标定之后得到了手眼矩阵,但是不知道怎么用于程序当中去,还有很多同学搞不清楚各个坐标系之间的关系,今天小智就给大家讲讲手眼矩阵的使用问题。 一、手眼矩阵为什么会长的不一样? 做完手眼标定,得到的手眼矩阵,有可能会长的不一样,这是因为旋转变换是有很多种表示方法的。 1.旋转的表

生活不止眼前的苟且 5343

OC学习记录, 数组(NSArray与NSMutableArray)

NSArray代表元素有序、可重复的一个集合。NSArray分别提供了类方法和实例方法来创建NSArray,两种创建方式需要传入的参数基本相似,只是类方法以array开头,而实例方法以init开头,下面是创建Array对象的几类常见方法的介绍。 一旦得到NSArray对象,接下来就可以调用它的方法来操作NSArray集合。NSArray集合最大的特点是集合元素有索引,因此,读者查阅NSArray类的参考手册时会注意到它的绝大部分方法都与集合元素的索引有关。 参考NSArray类的文档,可以看到NSArray

zdsey的博客 1702

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1163

树莓派4B保姆级教程:从零配置Python虚拟环境到PySide2开发全流程(含避坑指南)

本文提供树莓派4B上配置Python虚拟环境及PySide2 GUI开发的完整教程。针对armv7l架构的特殊性,详细讲解了从系统准备、虚拟环境创建到PySide2安装的避坑指南,并重点解决了跨平台UI文件处理等常见难题,帮助开发者构建稳定高效的开发环境。

9q8w7e6r5的博客 822

NSArray的用法

转载链接:http://simman.cc/article/2232/ 一、数组简介 NSArray:用来存储有序数组,它是不可变的,也不能存储C语言中的基本数据类型(int、float、double、enum、struct),也不能存nil,如果需要使用基本数据类型,需要先转成Objective-c中的对象。如NSNumber。另外,数组的最后一个元素一定是n

XQ1204556447的专栏 890

保姆级教程:用K210麦克风阵列模块实现声源定位(附完整Python代码与坐标计算)

本教程详细介绍了如何使用K210麦克风阵列模块实现高精度声源定位,包括硬件连接、算法解析与实战代码。通过Python代码示例,展示了从原始数据获取到三维空间坐标计算的完整流程,适用于智能家居、机器人导航等场景。

weixin_42558093的博客 227

OC基础(23)

NSArray基本概念 NSArray 遍历 NSArray排序 NSArray文件读写 NSArray 与字符串 NSArray基本概念 本小节知识点: 【理解】NSArray基本概念 【理解】NSArray创建方式 【理解】NSArray注意事项 【理解】NSArray常用方法 【理解】NSArray简写形式 1.NSArray的基本概念 ...

weixin_30904593的博客 343

GitLab教程(四):分支(branch)和合并(merge)

命令进行合并时,Git具备一定的智能自动化处理能力:如果一个分支仅修改了文件A,而另一个分支独立地修改了文件B,Git能够无缝整合这些更改,自动完成合并过程——即最终的代码既包含了对A文件的修改也包含了对B文件的修改。同样地,若两个分支虽然都修改了同一个文件,但涉及的是文件中互不重叠的部分,比如一个改动发生在第一行,另一个则在第二行,Git同样能巧妙地自动合并这些非冲突性修改。获取了远程分支的最新变化,或者当你想要合并本地的一个分支到当前分支时,就会用到这个命令。,默认会尝试合并远程分支到当前分支。

TracyCoder的博客 7885

C#与海康威视工业相机结合OpenCV与WPF:打造高效的机器视觉应用程序

本文介绍了基于C#、海康威视工业相机SDK和OpenCV的机器视觉应用开发方法。首先配置开发环境,包括海康SDK、OpenCvSharp和WPF项目设置。重点阐述了如何通过SDK初始化相机、获取视频流,并将YUV数据转换为OpenCV可处理的Mat格式进行图像处理(如边缘检测)。同时展示了如何用WPF实现界面交互和实时图像显示。该方案为工业自动化、质量检测等场景提供了高效的技术实现路径,结合了海康相机的高性能采集、OpenCV的强大算法和WPF的交互优势,具有较高的实用价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1498

OC--NSArray数组

数组是在开发中常用到的,它index(下标)和object(对象)对应的形式,使得它在序列化的数据展示中有很好的表现,而对于数组的处理,是数组学习的重点,很多数据的使用情况都不只是简单的拿到一个数组以后就去展示,还要有很多大量的逻辑处理。

m0_37681833的博客 1209

Prometheus+Grafana+alertmanager+PrometheusAlert监控告警 实现飞书告警

以上 是以grafana做的邮件告警,但是感觉邮件很少人看。下面是以webhook 可以接入。启动alertmanager (设置 开机在启动)下载prometheusalter 配置文件。这里的告警是基于grafana上搭建的。我们启动PrometheusAlert。写完之后进行重启Prometheus。prometheus 的告警规则。测试 基于我们生产环境做的文档。然后在grafana上导模板。上导入模板就可以 直接引用。访问 grafana页面。重启一下grafana。

墨痕诉清风的博客 859

OC数组 NSArray的4种遍历方式

前言:NSArray对应的是java的List,不同的是其元素不能更改,不过其派生类NSMutableArray可以更改,遍历的方式跟java的List基本一样 一.  for循环 Student *stu = [Student student]; NSArray *array = [NSArray arrayWithObjects:stu, @"1",@"2",nil]; int c

筑梦小丑 752

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Object-c学习之路八(NSArray(数组)遍历和排序)

今天学习了NSArray的遍历和排序,现在在这里做一下总结: 遍历现在实现了四中方法: 排序大概有三中方法:(代码中都有注释) 关于对象的排序还是以Student和Book为例 每个Student持有一个Book. 主函数: // // main.m // NSArray // // Created by WildCat on 13-7-25. // Copyright

Lves Li的专栏 1873

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NSArray的各种遍历以及各种排序方法

一、遍历 1.for循环遍历NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil]; int count = array.count; for (int i = 0; i<count; i++) { id obj = [array objectAtIndex:i]; } 2

qianyoucai优快云的博客 618

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NSArray用法大全

main.m // // main.m // NSArray // // Created by Rayln Guan on 9/4/13. // Copyright (c) 2013 Rayln Guan. All rights reserved. // #import #import "Student.h" int main(int argc, const c

259

NSArray的一些用法

+(id)arrayWithObjects:obj1,obj2,...nil 创建一个新的数组,obj1,obj2......是他的元素对象,以nil对象结尾 -(BOOL)containsObject:obj 确定数组中是否包含对象obj -(NSUInteger)count 返回数组元素个数 -(NSUInteger)indexOfObject:obj 第一个包含obj元素的索引号

iOS界@迷糊小书童 2158

遍历NSArray

NSArray *arr=@[@"1",@"2",@"3",@"4"]; 第一种方法 最常见的方法 for (int i = 0; i < arr.count; i++) { NSLog(@"%@",arr[i]); } 第二种方法 效率比较高 for (NSArray *ar in arr)...

a50893061的博客 159

c语言OBJECT数组,Objective-C中NSArray的基本用法示例

NSArray的排序+ (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{Student *stu = [[Student alloc] init];stu.firstName = firstName;stu.lastName = lastName;return stu;}+ (id)stude...

weixin_35510737的博客 347

【黑马程序员】【Foundation框架】数组NSArray和NSMutableArray

1、NSArray的用法示例 int main(int argc, const char * argv[]) { 2    @autoreleasepool { 3 //OC数组 可以存储不同类型的对象 只能存储对象,基本数据类型是不能存储的 4 //OC数组 存储的是对象的指针 5 NSArray *array = [[NS

MarsII的iOS技术博客 338

NSArray的4种遍历方式

一.  for循环 Student *stu = [Student student];  NSArray *array = [NSArray arrayWithObjects:stu, @"1",@"2",nil];  int count = array.count;//减少调用次数  for( int i=0; i    NSLog(@"%i-%@", i, [array object

HHH航_IOS开发学习之路 439

iOS中NSArray的各种遍历以及各种排序方法

一、遍历1.for循环遍历NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil]; int count = array.count; for (int i = 0; i&lt;count; i++) { id obj = [array objectAtIndex:i]; }2.快速遍历 Stud...

等待化茧成蝶的专栏 7249

黑马程序员-Object C之NSArray

------------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!---------------------------

wenli的专栏 359

01-OC中数组NSArray的遍历

首先,我们快速创建一个OC数组 NSArray *array = @[@"one", @"two", @"three", @"four"]; 1、常规方法遍历 (1)先列出我们最容易想到的(对比C语言数组遍历的方法) 优化前: 1> 第6行快速创建OC数组:NSArray *array = @[@"one", @"two", @"three", @four]; 2&gt...

weixin_30908707的博客 125

iOS 数组遍历删除&自定义迭代器

在iOS中,数组是无法通过 迭代器 删除的,无论是enumerateObjectsUsingBlock迭代器还是for in,抑或是NSEnumerator都无能为力,当然 for循环更不...

M_Andrain的博客 90
上一篇: Objective-C之Foundation中的NSString的一些常用的方法
下一篇: NSMutableString可变字符串的几种用法
技术宝哥
博客等级 码龄16年 331粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值