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.其用法如 ...
随机推荐
- MapReduce实现线性回归
1. 软件版本号: Hadoop2.6.0(IDEA中源代码编译使用CDH5.7.3,相应Hadoop2.6.0),集群使用原生Hadoop2.6.4.JDK1.8,Intellij IDEA 14 ...
- MYSQL 更新时间自己主动同步与创建时间默认值共存问题
本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50326259 在使用SQL的时候,希望在更新数据的时候自己主动填充 ...
- Linux Sendfile 的优势
Sendfile 函数在两个文件描写叙述符之间直接传递数据(全然在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率非常高,被称之为零拷贝. Sendfile 函数的定义 ...
- Java,泛型类型通配符和C#对照
c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,仅仅是语法糖,在编译器编译的时候都转换成object类型 类型通配符在java中表示的是泛型类型的父类 ...
- 初学PHP&MySQL 2014-05-31 12:40 92人阅读 评论(0) 收藏
PHP echo print 都能输出文本 date(format,timestamp)可以格式化时间戳 mktime()可以返回指定日期的时间戳 include 'filename'或者 requ ...
- P1824 进击的奶牛
题目描述 Farmer John建造了一个有N(2<=N<=100,000)个隔间的牛棚,这些隔间分布在一条直线上,坐标是x1,...,xN (0<=xi<=1,000,000 ...
- 使用iframe在手机中嵌套页面
使用iframe嵌套网页 <iframe id="show-iframes" frameborder="0" name="showHere&qu ...
- 实现人脸识别性别之路---matplotlib之注释
一.准备数据 利用np.linspace()函数得到一定范围内的数据集 利用2*x+1的公式求出y 二.创建窗口 三.根据具有规律的数据画图 四.调整坐标轴 1.将原本的坐标轴的上轴和右轴去掉,使用基 ...
- nginx编译安装选项说明
configure 脚本确定系统所具有一些特性,特别是 nginx 用来处理连接的方法.然后,它创建 Makefile 文件. configure 支持下面的选项: –prefix= <path ...
- libc.so.6: version GLIBC_2.14 not found
https://blog.csdn.net/heylun/article/details/78833050