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.其用法如 ...
随机推荐
- 华为:一张图看懂 HBase
来自为知笔记(Wiz)
- Linux系统编程——进程间通信:信号中断处理
什么是信号? 信号是 Linux 进程间通信的最古老的方式.信号是url=474nN303T2Oe2ehYZjkrggeXCaJPDSrmM5Unoh4TTuty4wSgS0nl4-vl43AGMFb ...
- linux(debian/ubuntu)下连接安卓手机--小米4为例
更改:如今小米连接Ubuntu等Linux系统,直接改动手机上的连接方式就可以. --------------------------------------------- 因为安卓手机底层就是lin ...
- Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...
- 重大漏洞:Bitlocker成摆设,多款固态硬盘硬件加密均可被绕过
荷兰拉德堡德大学的两名研究人员日前发表论文,描述了固态硬盘流行加密软件Bitlocker中的关键漏洞.固态硬盘需要口令来加密和解密其上存储的内容,但该口令可以被绕过. 荷兰拉德堡德大学的两名研究人员日 ...
- Linux学习总结(5)——CentOS常用的目录文件操作命令
CentOS常用的目录文件操作命令 一.路径操作的CentOS常用命令 cd pwd NO1. 显示当前路径 [root@rehat root]# pwd NO2. 返回用户主目录 [roo ...
- 关于Shiro的退出请求是如何关联到登录请求的思考
一.结论 先给出结论,是因为本身是很简单的道理.假设我们没有使用任何认证授权的框架,就简单的使用Cookie和HttpSession,那么用户登录后的每一个请求是如何关联上这个用户的呢?答案很简单,由 ...
- [转]C语言字节对齐问题详解
C语言字节对齐问题详解 转载:https://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: typedef struct{ ch ...
- jquery13 attr() prop() val() addClass()等 : 对元素属性的操作
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- VS添加程序集
项目->添加->引用->程序集 可在项目的引用目录中,查看引用的程序集