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.其用法如 ...
 
随机推荐
- Tensorflow MNIST 数据集測试代码入门
			
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50614444 測试代码已上传至GitH ...
 - HDU3265 Examining the Rooms【stirling数】
			
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=3625 题目大意: 有N个房间,每一个房间的要是随机放在某个房间内,概率同样.有K次炸门的机会. 求 ...
 - CODE ---代码助手  (保存代码、搜代码、生成网页、自由界面)
			
四大功能 1 保存代码 2 搜索代码 3 生成网页 4 自由界面 www.gudianxiaoshuo.com
 - Struts2 全局结果集
			
1.index,jsp <body> Result类型 <ol> <li><a href="user/user?type=1">返回 ...
 - mysql python中的pymysql模块使用
			
import pymysql # 在这之前需要给mysql授登录权限 grant all on "; 否则会导致连接时出错 # flush privileges; #创建连接 conn = ...
 - CloudFoundry 云平台部署
			
CloudFoundry云平台部署 CloudFoundry(TheOpenSourceCloudOperatingSystem)距离发布已经一年多了作为第一个开源的PaaS平台日臻成熟.在这一年里C ...
 - IntelliJ IDEA springmvc demo
			
construction pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
 - codefroces 873 B. Balanced Substring && X73(前缀和思想)
			
B. Balanced Substring You are given a string s consisting only of characters 0 and 1. A substring [l ...
 - Android开发当中Parcelable接口的使用
			
本文转载于:http://www.2cto.com/kf/201205/132814.html 本文稍微做了些修改 android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数 ...
 - AI:OPENCV实现人脸的自动识别
			
依赖jar包: faceRecognition.java package opencv; import java.awt.Graphics; import java.awt.image.Buffere ...