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.其用法如 ...
随机推荐
- Nginx 性能调优
原文地址:http://nginx.com/blog/tuning-nginx/ Tuning NGINX for Performance Nginx 性能调优 NGINX is well known ...
- linux设备驱动归纳总结(三):4.ioctl的实现
linux设备驱动归纳总结(三):4.ioctl的实现 一.ioctl的简单介绍: 尽管在文件操作结构体"struct file_operations"中有非常多相应的设备操作函数 ...
- C++中冒号(:)的作用
摘于:http://blog.csdn.net/zimingjushi/article/details/6549390 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef stru ...
- libc.so.6: version GLIBC_2.14 not found
https://blog.csdn.net/heylun/article/details/78833050
- 使用 HTML5 canvas制作拾色器
自制的拾色器漂亮吧,哈哈 废话不多说直接上代码,希望可以帮到需要的朋友 <html><head> <style> .canvas_color{p ...
- 【剑指Offer学习】【面试题27:二叉搜索树与双向链表】
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建不论什么新的结点.仅仅能调整树中结点指针的指向. 比方输入图4.12 中左边的二叉搜索树,则输出转换之后的排序现向链表. ...
- 九度 题目1154:Jungle Roads
题目描写叙述: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid mon ...
- RadioButton的check改变的时候
https://stackoverflow.com/questions/8095256/asp-net-radio-button-change You'll need to specify the a ...
- VS 格式化代码 Ctrl + K, Ctrl + F
- JSP从选择到放弃
JSP为什么会出现?出现的原因? ①因为在开发web网站时候,返现servlet做界面比较麻烦,于是出现了jsp. 运行在服务端(Java server pages)基于servlet,对servle ...