数组

用来存贮对象的有序列表,它是不可变的

不能存数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 的创建和遍历的更多相关文章

  1. [OC Foundation框架 - 7] NSArray的创建与遍历

    NSArray是不可变的,不能先创建再添加元素 NSArray可以放入任何OC对象,但不能放入基本数据类型.结构体.枚举等非OC对象 不能存储nil   A.常用方法1 创建 返回用量 是否含有某元素 ...

  2. NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习

    1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组. 2.NSArray的创建 NSArray * array = [[NSArray alloc]initWi ...

  3. C++ 创建和遍历二叉树

    一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新. #include <iostream> using namespace std; struct BiTNode{ ch ...

  4. 图的创建和遍历(BFS/DFS)

    图的表示方法主要有邻接矩阵和邻接表.其中邻接表最为常用,因此这里便以邻接表为例介绍一下图的创建及遍历方法. 创建图用到的结构有两种:顶点及弧 struct ArcNode { int vertexIn ...

  5. c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)

    二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...

  6. c/c++叉树的创建与遍历(非递归遍历左右中,不破坏树结构)

    二叉树的创建与遍历(非递归遍历左右中,不破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...

  7. python创建与遍历List二维列表

    python创建与遍历List二维列表 觉得有用的话,欢迎一起讨论相互学习~Follow Me python 创建List二维列表 lists = [[] for i in range(3)] # 创 ...

  8. JS实现图的创建和遍历

    图分为无向图和有向图 图的存储结构有邻接矩阵.邻接表.十字链表.邻接多重表这四种,最常用的是前两种 本篇主要是利用邻接矩阵实现无向图的创建和遍历(深度优先.广度优先),深度优先其实就是二叉树里的前序遍 ...

  9. [数据结构】【c语言】链表的创建和遍历

    第一次写代码的博客,一个刚刚接触的新手,来这里主要是为了记录自己,方便自己以后浏览,也欢迎大家指正.先来个简单的,动态链表的创建和遍历. #include<stdio.h> #includ ...

随机推荐

  1. ORA-07445: exception encountered: core dump [opiaba()+639] [SIGSEGV] [ADDR:0x0] [PC:0x1858C3F] [SI_KERNEL(general_protection)] []

    开发反馈应用无法连接数据库,发现数据库实例崩溃,且数据库为11.2.0.4 单实例. 数据库告警日志发现,数据库崩溃之前出现ORA- ORA-: exception encountered: core ...

  2. hdu 6197 array array array LIS

    正反跑一次LIS,取最大的长度,如果长度大于n-k就满足条件. ac代码: #include <cstdio> #include <cstring> #include < ...

  3. Sql Server根据字符串拆分多列

    select parsename(REPLACE(Field,',','.'),3) as segment_1, parsename(REPLACE(Field,',','.'),2) as segm ...

  4. call、apply、bind一直是不求甚解!

    一直感觉代码中有call和apply就很高大上(看不懂),但是都草草略过,今天非要弄明白!以前总是死记硬背:call.apply.bind 都是用来修改函数中的this,传参时,call是一个个传参, ...

  5. [JZOJ5888]GCD生成树

    [JZOJ5888]GCD生成树 题目链接 gugugu 分析 对于N很小的情况,暴力Prim即可 对于值域很小的情况,我的想法与solution不太一样,将值相同的缩成一个点,\(O(w^2)\)预 ...

  6. Django迁移

    Django迁移 学习目标: 如何在不编写任何SQL语句的情况下创建数据库表 更改model如何自动修改数据库 如何还原对数据库所做的更改 迁移能解决的问题 如果你不了解Django或者WEB开发,肯 ...

  7. 使用zrender.js绘制体温单(1)

    之前公司请外包做了一个体温单使用的zrender.js 但是代码比较复杂维护性比较低再加上自己技术也不行 最近闲下来的时候看了一下zrender的官网慢慢的摸索并读了下之前的代码,感觉实际并不难,就自 ...

  8. Go map使用

    前言 map 是在 Go 中将值(value)与键(key)关联的内置类型.通过相应的键可以获取到值. 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片.函数以及包含切片的 ...

  9. C++ 函数重载二义性

    说起函数重载,我不由得想起了C++的“多态”特性.多态又分为静态(编译时)多态和动态(运行时)多态,静态多态即为函数重载,动态多态则是虚函数机制.虚函数水较深,先不讨论,今天我们来看一下函数重载.作用 ...

  10. 使用了frame的页面如何整体进行跳转,而不是仅frame跳转

    使用了frame的页面如何整体进行跳转,而不是仅frame跳转 js window.parent.location.href="你的地址"; php echo "&quo ...