NSArray 的创建和遍历
数组
用来存贮对象的有序列表,它是不可变的
不能存数C语言的基本数据类型
只支持OC对象
#pragma mark Create a array
//Initialize NSArray
void arrayCreate(){
//Create an empty array
NSArray *array=[NSArray array];// static method create static Array no need to release
//empty can’t add boz it can’t be changed
//Create a array with one object
array=[NSArray arrayWithObject:@”123”];
//nil 代表我们元素的结束
array=[NSArray arrayWithObjects:@“a”,@”b”,@”c”,nil];
//3 elements. You can’t add a nil element, nil represent end of the array
//All above three methods need no release.
NSArray arrar1=[[NSArray alloc]init];
[array1 release];
//Check how many elements in array
unsigned int count =[array count]; //count is a get method ==
//unsigned int count=array.count;
NSLog(@”%i”,count);
}

#pragma mark use the array
void arrayUse(){
//Whether contain certain element
array=[NSArray arrayWithObjects:@“a”,@”b”,@”c”,nil];
if([array containsObject:L@”a”]){
NSLog(@”Contain a”);
}
//Return last element
NSString *last=[array lastObject];
NSLog(@”last is %@”,last);
//Get element from certain position
NSLog(@” Element in postion 1 is %@”,[array objectAtIndex:1]);
//Search the position of certain object ( and with range)
NSLog(“Positon of c is %i”,[array indexOfObject:@”c”]);
NSObject *obj=[[[NSObject alloc]init]autorelease];
array1=[NSArray arrayWithObjects:@“a”,@”b”,@”c”,@”a”,obj,nil];
NSRange range=NSMakeRange(0,2);
NSLog(“Positon of a is %i”,range);
}
//put Student Object
Student.h
-(void)dealloc{
NSLog(@”%@ is destroied”,self);
[super dealloc];
}
Student.m
#import “Student.h”
// pragma mark memory management about array addition
void arrayMemory(){
//If u insert an Object into an array , counter will retain once
Student *stu1=[[Student dealloc]init]; //counter =1
Student *stu2=[[Student dealloc]init];
//counter =1
Student *stu3=[[Student dealloc]init];
//counter =1
NSArray array=[[NSArray alloc]initWithObjects:stu1,stu2,stu3,nil];//counter=2
NSLog(@”count=%zi”,array.count);
NSLog(@”counter of stu1 ,stu2,stu3 is %zi, %zi, %zi”,[stu1 retainCount],[stu2 reytainCount],[stu3 retainCount]);// 2
[array release];
//When an array is deroied , all object counter inside the array will be release once
[stu1 release];
[stu2 release];
[stu3 release];
}
//NSArray 的比较
-(BOOL)isEqualToArray:(NSarray *)otherArray
//比较两个数组的内容是否相同
-(id)firstObjectCommonWithArray:(NSarray *)otherArray
//return the first same Object of two Array
#pragma mark send message to Object in Array
//-(void)makeObjectsPerformSelector:(SEL)aSelector
//-(void)makeobjectsperformSelector:(SEL)aSelector withobject:(id)argument
//让数组里面所有元素都执行aSelector 这个方法
Student.h
@interface Student:NSobject
-(void)test;
-(void)test2:(NSString *)str;
+(id)student;
@end
Student.m
@implementation
+(id)student{
return [[[Student alloc]init]autorelease];
}
-(void)test{
NSLog(@“%@->test”,self);
}
-(void)test2:(NSString *)str{
NSLog(@”%@->%@”,self,str);
}
-(void)dealloc{
NSLog(@”%@ is destroied”,self);
}
@end
#pragma mark Send message to element inside array
main.m
void arrayMeaagae(){
Student *stu1=[Student student]; //+ no nee release
Student *stu2=[Student student];
Student *stu3=[Student student];
NSArray *array=[NSArray arrayWithObjects:stu1,stu2,stu3,nil]; //+
//All the object call method test
[array makeObjectsPerformSelector:@selector(test)];
//All the object call method test with a parameter
[array makeObjectsPerformormSelector:@selector(test2:)withObject:@”123”];
}
//pragma mark traverse array
void arrayFor1(){
Student *stu1=[Student student];
NSArray *array=[NSArray arrayWithObjects:stu1,@”1”,@”2”,@”3”,nil];
//id==void *
int count=array.count;
for(int i=0;i<count;i++){
id obj=[array objectAtIndex:i];
NSLog(@”%i->%@”,i,obj);
}
}
//pragma mark traverse array2
void arrayFor2(){
Student *stu1=[Student student];
NSArray *array=[NSArray arrayWithObjects:stu1,@”1”,@”2”,@”3”,nil];
//id==void *
int i=0;
for(id obj in array){
NSLog(@”%i->%@”,i,obj);
if(i==1)
break;
i++;
}
}
//pragma mark traverse array3 block
void arrayFor3){
Student *stu1=[Student student];
NSArray *array=[NSArray arrayWithObjects:stu1,@”1”,@”2”,@”3”,nil];
[array enumerateObkectUsingBlock:
^(id obj,NSUInteger idx,BOOL *stop){
NSLog(@”%i->%@”,idx,obj);
if(idex==1){
*stop=YES;} //stop traverse
}
];
}
//Tips: 平时写代码dealloc方法中最好打印一下,这样可以看出对象有没有被销毁,然后可以检测有没有内存泄露。
#pragma mark NSEnumerator
//集合的迭代器,可用于遍历集合元素
//NSArray有相应的方法来可以获取迭代器
//-(NSEnumerator *)objectenumerator
//获取一个正的迭代器
//-(NSEnumerator *)reverseobjectenumerator
//获取一个反序遍历的迭代器
//常用方法
//-(id)nextobject
//attain next object
//-(NSArray *)allobjects
//attatain all objects
//pragma mark traverse array4 enumerator
void arrayFor4(){
Student *stu1=[Student student];
NSArray *array=[NSArray arrayWithObjects:stu1,@”1”,@”2”,@”3”,nil];
NSEnumerator *enumerator=[array objectEnumerator];
//NSEnumerator *enumerator=[array reverseObjectEnumerator];
id obj=nil;
while(obj=[enmurator nextObject]){
NSLog(@”obj=%@”,obj);
}
NSArray array2=[enumerator allObjects];
//Should put in frond of traverse otherwise nil
//它是取出没有被遍历过得对象
NSLog(@”array2:%@”,array2);
}
NSArray 的创建和遍历的更多相关文章
- [OC Foundation框架 - 7] NSArray的创建与遍历
NSArray是不可变的,不能先创建再添加元素 NSArray可以放入任何OC对象,但不能放入基本数据类型.结构体.枚举等非OC对象 不能存储nil A.常用方法1 创建 返回用量 是否含有某元素 ...
- NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习
1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWi ...
- C++ 创建和遍历二叉树
一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新. #include <iostream> using namespace std; struct BiTNode{ ch ...
- 图的创建和遍历(BFS/DFS)
图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIn ...
- c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)
二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...
- c/c++叉树的创建与遍历(非递归遍历左右中,不破坏树结构)
二叉树的创建与遍历(非递归遍历左右中,不破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...
- python创建与遍历List二维列表
python创建与遍历List二维列表 觉得有用的话,欢迎一起讨论相互学习~Follow Me python 创建List二维列表 lists = [[] for i in range(3)] # 创 ...
- JS实现图的创建和遍历
图分为无向图和有向图 图的存储结构有邻接矩阵.邻接表.十字链表.邻接多重表这四种,最常用的是前两种 本篇主要是利用邻接矩阵实现无向图的创建和遍历(深度优先.广度优先),深度优先其实就是二叉树里的前序遍 ...
- [数据结构】【c语言】链表的创建和遍历
第一次写代码的博客,一个刚刚接触的新手,来这里主要是为了记录自己,方便自己以后浏览,也欢迎大家指正.先来个简单的,动态链表的创建和遍历. #include<stdio.h> #includ ...
随机推荐
- MySQL 子查询(二)
接上篇文章,从这节起:MySQL 5.7 13.2.10.5 Row Subqueries 五.行子查询(ROW Subqueries) 标量子查询返回单个值,列子查询返回一个列的多个值.而行子查询是 ...
- sqlserver 聚集索引 非聚集索引
聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或者多列值排序.像我们用到的汉语字典,就是一个聚集索引.换句话说就是聚集索引会改变数据库表中数据的存放顺序.非聚集索引不会重新组织表中的数据,而是对 ...
- 创建新表,自动授权trigger
需求 一个用户下三个表,开发人员不定时进行rename表名称,create原表名称 as old_table 插入少量数据,另一个业务用户需要访问该表,由于表名称rename导致经常需要手工授权. 需 ...
- C# Entity Framework The ObjectContext instance has been disposed and can no longer be used for operations that require a connection
The ObjectContext instance has been disposed and can no longer be used for operations that require a ...
- [jquery]ajax最最常用的七个属性
1.url 类型:String 默认值: 当前页地址.发送请求的地址. 2.data 类型:String 发送到服务器的数据.将自动转换为请求字符串格式.GET 请求中将附加在 URL 后.查看 pr ...
- (六)CXF之自定义拦截器
一.需求分析 客户端在调用服务端的方法时,需要进行用户名和密码验证.此时分为: 客户端请求的时候,要发送用户名密码到服务端 服务端检验用户名密码. 二.案例 前提:本章案例是基于前一章节的例子进一步讲 ...
- VBA学习资料分享-6
从网上抓取数据到EXCEL中是VBA的一个常用之处,今天分享下VBA网抓的一些套路,主要有以下几种: 第一种:msxml2.xmlhttp/Microsoft.XMLHTTP/WinHttp.WinH ...
- K2 BPM_携手捷普:让流程立于云端,臻于至上_全球领先的工作流引擎
在工业4.0地催化下,新一代信息技术与高科制造业深度融合,正在引发影响深远的产业变革,形成了新的生产方式.产业形态.商业模式和经济增长点. 捷普作为世界上最大型的电子制造服务公司之一,正站在新的历史发 ...
- c#重写了窗体的OnKeyDown事件,但是不执行
设置下窗体的KeyPreview属性值为True即可 总结:遇到类似这样的问题,比如其他窗体运行没问题,就新建的窗体有问题.应该检查下窗体的属性.
- HCIP DAY2
OSPF协议的基本特点: 支持无类域间路由(CIDR) vlsm NA 无路由自环 收敛速度快 使用IP组播放收发协议数据 支持多条等值路由 静态路由 动态路由 等价路由 浮动路由 支持协议报文的认证 ...