Objective-C基础笔记(9)Foundation常用类NSArray
NSArray用来存储对象的有序列表,它是不可变的
NSArray不能存储C语言中的基本数据类型,如int、float、enum、struct,也不能存储nil,nil代表数组元素的结束
//
// main.m
// NSArray
//
// Created by lixiaoqiang on 14/11/19.
// Copyright (c) 2014年 lixiaoqiang. All rights reserved.
// #import <Foundation/Foundation.h> //数组的创建
void arrayCreate(){
//创建一个空的数组
NSArray *array = [NSArray array];
//创建有1个元素的数组
array = [NSArray arrayWithObject:@"123"];
//创建有多个元素的数组,nil代表元素的结束
array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
//查看元素个数
int count = [array count]; //或者使用[array.count]
} //数组的简单使用
void arrayUse(){
NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
//判断是否包含了某个元素
if([array containsObject:@"a"]){
NSLog(@"包含了子元素a");
}
//获取数组最后一个元素
NSString *last = [array lastObject];
NSLog(@"最后一个元素是%@", last);
//获取某个索引处的元素
NSString *str = [array objectAtIndex:1];
NSLog(@"索引是1的位置是%@", str);
//判读元素的索引
unsigned long index = [array indexOfObject:@"c"];
NSLog(@"c的位置索引是%zi", index);
} //定义一个Student对象
@interface Student : NSObject
//添加两个属性
@property (nonatomic, retain) NSString *firstname;
@property (nonatomic, retain) NSString *lastname; + (id)student; //构造方法
+ (id)studentWithFirstName:(NSString *)firstname lastname:(NSString *)lastname;
- (void)test;
//用于对象比较(返回值必须是NSComparisonResult类型)
- (NSComparisonResult) compareStudent:(Student *)stu; @end @implementation Student + (id)student{
return [[[Student alloc] init] autorelease];
}
+ (id)studentWithFirstName:(NSString *)firstname lastname:(NSString *)lastname {
Student *stu = [[[Student alloc] init] autorelease];
stu.firstname = firstname;
stu.lastname = lastname;
return stu;
}
- (void)test {
NSLog(@"Student的test方法");
} - (NSComparisonResult)compareStudent:(Student *)stu{
//按照姓进行排序
return [self.lastname compare:stu.lastname];
} //相当于java的toString方法
- (NSString *)description{
return [NSString stringWithFormat:@"[%@ %@]", self.lastname, self.firstname];
} - (void)dealloc{
NSLog(@"%@被销毁了");
[_firstname release];
[_lastname release];
[super dealloc];
}
@end //数组的内存管理
void arrayMemory(){
Student *stu1 = [[Student alloc] init];
Student *stu2 = [[Student alloc] init];
Student *stu3 = [[Student alloc] init];
NSLog(@"stu1:%zi", [stu1 retainCount]); //计数器为1
//数组会对添加的对象做一次retain操作
NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
NSLog(@"stu1:%zi", [stu1 retainCount]); //计数器为2
NSLog(@"count=%zi", array.count);
//数组被销毁的时候会对内部的所有元素都做一次release操作
[array release];
[stu1 release];
[stu2 release];
[stu3 release];
} void arrayMessage(){
Student *stu1 = [Student student];
Student *stu2 = [Student student];
Student *stu3 = [Student student]; NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
//让数组里面的所有对象调用test方法
[array makeObjectsPerformSelector:@selector(test)];
} //遍历数组1
void arrayFor1(){
NSArray *array = [NSArray arrayWithObjects:@"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);
}
} //遍历数组2
void arrayFor2(){
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
for(id obj in array){
NSLog(@"%@", obj);
}
} //遍历数组3----Block
void arrayFor3(){
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%Zi位置是%@", idx, obj);
if(idx == 1) *stop = YES; //如果索引为1则停止遍历
}];
} //遍历数组4----迭代器
void arrayFor4(){
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
//获取数组的迭代器
NSEnumerator *enumerator = [array objectEnumerator];
//反向迭代器
//NSEnumerator *renu = [array reverseObjectEnumerator];
//获取下一个遍历的元素
//[enumerator nextObject];
id obj = nil;
while(obj = [enumerator nextObject]){
NSLog(@"%@", obj);
}
} //派生出新的数组
void arrayNew(){
//添加元素
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
NSArray *array2 = [array arrayByAddingObject:@"3"];
//裁剪元素
NSRange range = NSMakeRange(1, 2);
[array2 subarrayWithRange:range];
} //数组的其他用法
void arrayOther(){
//利用分隔符拼接
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
NSString *str = [array componentsJoinedByString:@","];
NSLog(@"%@", str); //1,2,3,4
//数组写入文件
NSArray *path = @"/user/apple/Desktop/array.xml";
[array writeToFile:path atomically:YES];
//从文件读出数组
NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
} //数组排序1
void arraySort1(){
NSArray *array = [NSArray arrayWithObjects:@"3", @"1", @"4", @"2", nil];
//指定元素的比较方法(compare:)
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"array2:%@", array2);
} //数组排序2
void arraySort2(){
Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];
Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];
Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"]; NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil]; NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];
} //数组排序3---Block排序
void arraySort3(){
Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];
Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];
Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"]; NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
[array sortedArrayUsingComparator:^NSComparisonResult(Student *stu1, Student *stu2) {
return [stu1.lastname compare:stu2.lastname];
}];
} //数组排序4,可以用来对对象嵌套排序 比如Student中有一个book对象就可以使用@"book.bookname"对书名排序
void arraySort4(){
Student *stu1 = [Student studentWithFirstName:@"sun" lastname:@"home"];
Student *stu2 = [Student studentWithFirstName:@"dawan" lastname:@"ganban"];
Student *stu3 = [Student studentWithFirstName:@"lxq" lastname:@"xsyu"];
//创建排序描述器
NSSortDescriptor *descript = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];
NSArray *array = [NSArray arrayWithObjects:stu1, stu2, stu3, nil];
//调用排序
NSArray *array2 = [array sortedArrayUsingDescriptors:descript];
} int main(int argc, const char * argv[]) {
@autoreleasepool {
//arrayFor4();
}
return 0;
}
NSMutableArray是可变数组,派生自NSArray,相关操作如下
void arrayCreate(){
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1", @"2", nil];
[array addObject:@"3"];
[array removeObject:@"3"]; [array removeLastObject];
[array removeAllObjects];
} void arrayMemory(){
//对被添加的元素做一次retain操作
//[array addObject:stu1];
//对被删除的元素做一次release操作
//[array removeObject:stu1]; //当数组被释放的时候会对所有的元素做一次release操作
//[array release];
}
Objective-C基础笔记(9)Foundation常用类NSArray的更多相关文章
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java 学习笔记(9)——java常用类
之前将Java的大部分语法都回顾完了,后面添加一些常见的操作,基础语法就结束了.至于在这里再次提到常用类是由于有一部分体现在使用它的继承类或者接口之类的.这些需要有面向对象编程的基础 Object类 ...
- Objective-C基础笔记(8)Foundation常用类NSString
一.创建字符串的方法 void stringCreate(){ //方法1 NSString *str1 = @"A String!"; //方法2 NSString *str2 ...
- Java基础(十一)常用类总结(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- java基础(十三)常用类总结(三)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- Java语法基础学习DayEighteen(常用类)
一.String类 1.特点 String代表不可变的字符序列,底层用char[]存放. String是final的. 2.内存解析 3.常用方法 int length() char charAt(i ...
- Java基础(七)常用类
一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...
- 【学习笔记】QT常用类及应用
一.QT基类: QObject 二.QT中常用的库 QT中的类根据功能划分在不同的库中,在用户属性.pro文件中可以看到. 三.Qt基本对话框的使用 常用5类: 通过类名可以直接调用类的静态成员函数. ...
- Objective-C:Foundation框架-常用类-NSArray
NSArray是用来存储对象的有序列表(NSSet是没有顺序的),它是不可变的.NSArray不能存储C语言中的基本数据类型,如int\float\enum\struct等,也不能存储nil.其用法如 ...
随机推荐
- ubuntu中开启、关闭防火墙
1.关闭ubuntu的防火墙 ufw disable 开启防火墙 ufw enable 2.卸载了iptables apt-get remove iptables 3.关闭 ...
- 【cocos2d-x 3.7 飞机大战】 决战南海I (四) 敌机管理
敌方飞机应该不定时的出现,有自己的生命周期.运动轨迹.这个类用来管理敌机的产生.移动.爆炸.销毁等. 敌机管理类主要函数例如以下 //绑定控制器(更新分数) void bindController(C ...
- 改动npm包管理器的registry为淘宝镜像(npm.taobao.org)
起因 安装了node.安装了npm之后,官方的源实在是 太慢了! 看了看淘宝的npm镜像, http://npm.taobao.org/ 居然说让我再下载一个cnpm,要不然就每次都得install ...
- Iocomp控件之数字显示【图文】
Iocomp关于数字显示有自己的一套方案.并且效果非常棒哦 效果图: 插入控件: 默认效果: 随意改动属性后: 加入变量 调用函数: ); 效果图:
- POJ 3265 DP
思路: f[i][j]表示前i天能做j道题 (是做 不是做完) if(f[i-1][k]) if(suma[j]-suma[k]+g[i-1][k]<=n) f[i][j]=1,g[i][j]= ...
- Sandbox
Sandbox Contents Overview Design principles Sandbox windows architecture The broker process The targ ...
- 实现人脸识别性别之路---matplotlib
Np.linspace(start,stop,num,endpoint,dtype)函数 1.参数:范围值,在范围值中取到的数值总数.是否包含范围值.类型 2.返回值:返回一维数据 3.在指定的范围内 ...
- Maven学习总结(19)——深入理解Maven相关配置
MAVEN2的配置文件有两个settings.xml和pom.xml settings.xml:保存的是本地所有项目所共享的全局配置信息,默认在maven安装目录的conf目录下,如果没有安装mave ...
- Bag标签之中的一个行代码实行中文分词实例3
例3: 分词(返回一个书包.以_0._1._2 ...取出分好的词) <bag id=words act=2words>我喜欢黄色高领T恤衫</bag> 注意没有name属性 ...
- 开创学习的四核时代-iTOP-4412开发板开源硬件平台
iTOP-4412开发板如今比較热门的开发板.笔者最近入了一套. 也推荐给初学ARM的朋友学习,4412开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具高速读取与 ...