数组

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

不能存数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. 最快得到MYSQL两个表的差集

    Mysql里不外乎就是 子查询 和 连接 两种方式. 设第一个表为table1, 第二个为table2, table1包含table2. sql为: //子查询 select table1.id fr ...

  2. SVN 问题解决之 Working copy path does not exist in repository

    同事的SVN更新时提示某个特定文件提示 Working copy path does not exist in repository svn更新会被这个错误打断,导致无法完全更新 删掉文件再更新仍然有 ...

  3. 实现Bootstrap表格拖拽

    实现Bootstrap表格拖拽: 需要引入jquery.min.js.bootstrap相关文件,以及jquery.dragsort-0.5.2.js 代码如下: <html> <h ...

  4. 将两个数组相同index的value合并成一个新的value组成一个新的数组

    将两个数组相同index的value合并成一个新的value组成一个新的数组 前提: 这两个数组的长度相同 生成后的新数组长度也相同 返回值都是对象 把rows对象的key和value弄成两个数组, ...

  5. Go map使用

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

  6. 【Day4】4.Request对象之Get请求与URL编码

    import urllib.parse as up import urllib.request as ur kw = '动漫' data ={ 'kw':kw, 'ie':'utf-8', 'pn': ...

  7. 爬虫如何发现更多的url呢,怎么动态收集新的url连接

    大家在做爬虫采集数据的时候很多都会遇到增量采集的问题,有些时候是通过过滤url来进行的,有些是通过爬取网页后再进行分析判断, 以上这些过程也许大部分做爬虫的都会这么做,各位有没有想过, 除了以上的常用 ...

  8. 【问题】使用XShell连接Debian,没有语法高亮

    编辑家目录里面的.bashrc文件,取消红框中的注释. 我使用的是XShell连接Debian,有的人可能改完也没有语法高亮,试着改下XShell的配色方案 参考:https://www.cnblog ...

  9. SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)

    最近发现SSL/TLS漏洞已经修改过,但是绿盟扫描器还可以扫描出来,网上看了很多文章,但是能用的比较少,今天刚好有空,就自己写一下. 方法一: 控制面板--->系统和安全--->管理工具- ...

  10. js中的in

    in这个操作符平时我们可能用的不多,但是一旦有需要我觉得还是很有用的,昨天在in操作符中栽了一个坑,写个博客纪念一下 var json = {a:1,b:2,c:3}; console.log('a' ...