NSArray是不可变的,不能先创建再添加元素

NSArray可以放入任何OC对象,但不能放入基本数据类型、结构体、枚举等非OC对象
不能存储nil

 
A.常用方法1

  1. 创建
  2. 返回用量
  3. 是否含有某元素
  4. 最后的元素
  5. 取得某位置的元素
当一个对象放入数组的时候,这个对象的计数器加1
 #pragma mark create a array
void arrayCreate()
{
//Create an empty array
NSArray *array = [NSArray array]; //Create an array with one element
array = [NSArray arrayWithObject:@""]; array = [NSArray arrayWithObjects:@"a", @"b", @"d", nil]; NSUInteger count =[array count];
NSLog(@"%@", count); [array release];
}

最后的nil用作标示数组的结束,不会被存储进数组元素,不允许在其他地方插入

error:    array = [NSArray arrayWithObjects:@"a”, nil, @"d"];

 #pragma mark common use
void arrayUser()
{
NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
if ([array containsObject:@"a"])
{
NSLog(@"Contans a");
} NSString *last = [array lastObject];
NSLog(@"%@", last); NSString *str = [array objectAtIndex:];
NSLog(@"%@", str); NSUInteger location = [array indexOfObject:@"c"];
NSLog(@"%@", location); [array release];
} #pragma memory manage
void memoryManage()
{
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init]; NSLog(@"stu1: %zi", [stu1 retainCount]); NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil]; NSLog(@"stu1: %zi", [stu1 retainCount]); [stu1 release];
[stu2 release];
[stu3 release]; [array release]; }
 
B.常用方法2
 
1.给数组所有元素发送消息,调用同一个方法
 void arrayMessage()
{
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init]; NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil]; [array makeObjectsPerformSelector:@selector(test2:) withObject:@"test2"]; [stu1 release];
[stu2 release];
[stu3 release]; [array release];
}
 
2.遍历
(1)for 循坏
 void arrayLoop()
{
Student *stu = [[Student alloc]init];
NSArray *array = [[NSArray alloc] initWithObjects:stu, @"", @"", nil];
unsigned long count = array.count;
// for (int i=0; i<count; i++)
// {
// id obj = [array objectAtIndex:i];
// NSLog(@"%i - %@", i, obj);
// } int i = ;
for (id obj in array)
{
NSLog(@"%i - %@", i, obj);
i++;
} [stu release];
[array release];
}
 
(2)使用Block进行循环处理
 void arrayLoopByBlock()
{
Student *stu = [[Student alloc]init];
NSArray *array = [[NSArray alloc] initWithObjects:stu, @"", @"", nil]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%zi - %@", idx, obj);
if (idx == )
{
*stop = YES;
}
}]; [stu release];
[array release];
}
 
(3).迭代器
 void arrayLoopByEnumerator()
{
Student *stu = [[Student alloc]init];
NSArray *array = [[NSArray alloc] initWithObjects:stu, @"", @"", nil]; // NSEnumerator *e = [array objectEnumerator];
NSEnumerator *e = [array reverseObjectEnumerator];
id obj = nil;
while (obj = [e nextObject])
{
NSLog(@"The element is %@", obj);
} [stu release];
[array release];
}
创建整数数组
(1)

      NSArray *array61 = [NSArray arrayWithObjects:@, @, @, @, @, @, @, @, @, @, nil];
实际上是把数字自动转化成了NSNumber类型
 
 
(2)不能用于NSMutableArray

 NSArray *array61 = @[@, @, @, @, @, @, @, @, @, @];
 
 
 

[OC Foundation框架 - 7] NSArray的创建与遍历的更多相关文章

  1. [OC Foundation框架 - 8] NSArray排序

    1.派生 voidarrayNew() { NSArray*array = [NSArrayarrayWithObjects:",nil]; NSArray*array2 = [arraya ...

  2. [OC Foundation框架 - 2] NSString 的创建

    A. 不可变字符串 void stringCreate() { //Don't need to release memory by this way NSString *str1 = @"S ...

  3. Foundation框架之NSArray、NSDictionary、NSSet及其Mutable类型

    Foundation框架之NSArray.NSDictionary.NSSet及其Mutable类型 目录 概述——对Foundation框架集合类的理解 NSArray NSDictionary N ...

  4. OC中Foundation框架之NSArray、NSMutableArray

    NSArray概述 NSArray是OC中的数组类 NSArray特点 )只能存放任意OC对象,并且是有顺序的 )不能存放非OC对象,比如int/float/double/char/enum/stru ...

  5. OC Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  6. OC Foundation框架—字符串

    一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:OC不可变数组 NSMutableA ...

  7. OC Foundation框架—结构体

    一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...

  8. iOS - OC Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  9. 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...

随机推荐

  1. 2.Adding a Controller

    MVC stands for model-view-controller.  MVC is a pattern for developing applications that are well ar ...

  2. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)1----C#中动态加载和卸载DLL

    我们知道在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载. 在C#中我们也能使用Assembly.Load ...

  3. php 对象调用方法

    static union _zend_function *zend_std_get_method(zval **object_ptr, char *method_name, int method_le ...

  4. poj1947

    树上背包? 问最少断掉多少条边可以形成节点数为k的块 设f[i,j]表示以节点i为根,形成一个节点数为k的块要断多少条边 则有:f[x,j]:=min(f[x,j],f[x,j-k]+f[y,k]-2 ...

  5. 【转】iOS中16进制转10进制

    原文网址:http://www.voidcn.com/blog/u012198553/article/p-4976772.html /// 将十六进制的字符串转化为NSData - (NSData ) ...

  6. 表格的一些原生js操作(隔行变色,高亮显示,添加删除,搜索)

    看着网上的视频教程,虽说还是有点简单,但还是不免想记录下.这些操作包括(隔行变色,高亮显示,添加删除,搜索功能),而这儿就是涉及table的原有属性“tBodies” “rows” “cells”等几 ...

  7. 在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)

    版本:v1.2   Crifan Li 摘要 本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs.以及简介Linux中的已有的通 ...

  8. 任务栏窗口和状态图标的闪动 z

    Demo程序: 实现任务栏窗体和图标的闪动: 整个程序是基于Windows Forms的,对于任务栏右下角状态图标的闪动,创建了一个类型:NotifyIconAnimator,基本上是包装了Windo ...

  9. ZOJ 3299-Fall the Brick(线段树+离散化)

    题意: n个区间 ,给出区间的左右坐标 ,区间内填满宽度为1的箱子,有m个板子给出板子的高度和左右坐标(同高度不重叠) 所有箱子从上向下落,求每块板子能接到的箱子数. 分析: 首先给的区间很大,一开始 ...

  10. Zabbix探索:工作时间的设置

    默认情况下,Zabbix的工作时间是启用的. 启用后,图形的北京在工作时间内就是白底的,否则就是灰底的. 今天纠结了半天,因为无论如何都是灰底的. 后来连接到服务器上一看,靠,忘记同步时间了,所以刚好 ...