iOS阶段学习第16天笔记(Category-NSSet-SEL-NSIndexSet 操作)
iOS学习(OC语言)知识点整理
一、NSSet、NSMutableSet集合的介绍
1)NSSet、NSMutableSet集合,元素是无序的,不能有重复的值。
2)用实例方法创建一个不可变集合对象 例如:
//宏定义
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
2)用类方法创建一个不可变集合对象 例如:
NSSet *set2=[NSSet setWithObjects:TOBJ(),TOBJ(),TOBJ(), nil];
3)NSSet 快速遍历方法(无序,所以没有下标)例如:
for(id num in set1){
NSLog(@"%@",num);
}
4)setSet 用于修改集合内容 例如:[mSet setSet:set1];
5)intersectSet 用于获取两个集合的交集(返回两个集合中相同的元素)。例如:
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
NSSet *set2=[NSSet setWithObjects:TOBJ(),TOBJ(),TOBJ(), nil];
[mSet intersectSet:set2];
NSLog(@"intersect:%@",mSet); //结果:2
6)unionSet 用于获取两个集合的并集(返回两个集合中所有的元素,如果重复只显示其中一个) 例如:
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet *set1=[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
NSSet *set2=[NSSet setWithObjects:TOBJ(),TOBJ(),TOBJ(), nil];
[mSet intersectSet:set2];
NSLog(@"intersect:%@",mSet); //结果:123456
7)minusSet 用于获取两个集合的差集 例如:
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
NSSet *set2=[NSSet setWithObjects:TOBJ(),TOBJ(),TOBJ(), nil];
[mSet minusSet:set2];
NSLog(@"intersect:%@",mSet); //结果:13456
8)allObjects 用于将集合转换为数组 例如:
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
NSArray *array= [mSet allObjects];
9)anyObject 取set中任意一个元素(如果set中只有一个元素,取值)
#define TOBJ(n) [NSNumber numberWithInt:n]
NSSet * mSet =[[NSSet alloc]initWithObjects:TOBJ(),TOBJ(),TOBJ(),TOBJ(),TOBJ(), nil];
id value=[mSet anyObject];
二、NSIndexSet、NSMutableIndexSet 可变索引集合的介绍
1)索引集合,表示唯一的整数的集合,有可变和不可变之分。
2)initWithIndexesInRange 用指定的范围对应的索引创建索引对象 例如:
NSIndexSet *indexSet1=[[NSIndexSet alloc]initWithIndexesInRange:
NSMakeRange(, )];//结果 2,3,4
3)objectsAtIndexes 根据索引集合中的索引取出数组中对应的元素(返回数组) 例如:
NSIndexSet *indexSet1=[[NSIndexSet alloc]initWithIndexesInRange:NSMakeRange(, )];
NSArray *array=@[@"one",@"two",@"three",@"four",@"five",@"sex"];
NSArray *array2=[array objectsAtIndexes:indexSet1];
NSLog(@"array2:%@",array2); //结果:array2:three four five
4)创建一个可变的集合索引(初始化时有一个索引)(可以存储不连续的索引值) 例如:
NSMutableIndexSet *indexSet2=[NSMutableIndexSet indexSetWithIndex:];
[indexSet2 addIndex:];
[indexSet2 addIndex:];
[indexSet2 addIndex:];
NSLog(@"count:%ld",indexSet2.count);//获取个数
NSArray *array3=[array objectsAtIndexes:indexSet2];//结果:two three five
5)NSNull:类表示空, 只有一个类方法[NSNull null]获取空对象,在数组中nil表示元素结束(不能用nil表示空元素
可采用[NSNull null]表示空元素) 例如:
NSArray *array5=[NSArray arrayWithObjects:@"red",[NSNull null],@"yellow",@"blue", nil];
三、Category 介绍
1)Category 意为: 类别、分类、类目
1、可以在不改变类名的情况下,扩充类的功能(给类增加方法)
2、可以将类的功能拆成多个文件编译
3、类别中不能增加成员变量,可以访问原来类中的成员变量
4、类别中可以增加与原来类中同名的方法,调用时优先调用
5、添加文件时选择Objective-C File 那个文件同时注意选择要拓展的类名
2)类别的声明类似于类的声明,@interface要扩充功能的类名(类别名)
1、类别不能实例化对象
2、类别中不能增加成员变量。
3、类别中的方法可以访问原来类中的成员变量
4、类别可以调用原来类中的方法
5、类别中的方法可以被子类继承
6、类别可以添加与原来类中相同的方法,调用时类别中的方法优先调用,一般不建议这样操作(无法再调用原来类中的方法)
3)字符串、NSNumber是簇类,底层是由很多类组成的,不能有子类 ,因为子类调用不了父类中的方法
4)Category 文件名格式为:父类文件名+子类文件名 如:NSMutaleString+Resvrse.h
5)Category .m文件中的方法表现形式: @implementation NSMutableString (Reverse)
四、Extension 的介绍
1)extension:相当于未命名的Category,可以扩展类的功能(增加方法),也可以增加成员变量。
2)extension:只有.h文件
3)extension 表现形式 @interface 类名()例如: 1 @interface Person (){}
4)在.m文件中也可以声明成员变量,不会将其放在接口h文件中暴露给使用者。 例如:
@interface Person()
{
int _num;
}
//将方法声明为私有的
-(void)print2;
@end
五、SEL的介绍
1)SEL是一种类型,将方法名封装为sel的变量,通过SEL找到方法的地址,调用方法。
2)SEL 封装方法实例代码:
//将play方法名封装成SEL类型的数据
SEL sel=@selector(play);
//判断p1所属的类是否实现了sel中的方法
if([p1 respondsToSelector:sel]){
//p1查找sel中方法的地址,再调用对应的方法
[p1 performSelector:sel];
}
3)使用SEL 方法实现数组排序 实例代码:
1、创建一个Student类 .h文件中的代码如下:
#import <Foundation/Foundation.h>
@interface Student : NSObject {
NSString *_name;
int _age;
int _score;
} -(void)setName:(NSString*)name;
-(NSString *)name;
-(void)setAge:(int)age;-(int)age;
-(void)setScore:(int)score;-(int)score;
-(NSComparisonResult)compareStudent:(Student *)s2;
+(Student *)studentWithName:(NSString *)n andAge:(int)a andScore:(int)s;
-(void)print;
@end
2、.m文件中的代码实现
#import "Student.h"
@implementation Student
-(void)setName:(NSString*)name{
if(name!=_name){
[_name release];
_name=[name retain];
}
}
-(NSString *)name{ return _name;}
-(void)setAge:(int)age{
_age=age;
}
-(int)age{
return _age;
}
-(void)setScore:(int)score{
_score=score;
}
-(int)score{
return _score;
}
+(Student *)studentWithName:(NSString *)n andAge:(int)a andScore:(int)s{
Student *stu=[[[Student alloc]init]autorelease];
stu.name=n;
stu.age=a;
stu.score=s;
return stu;
}
-(void)print{
NSLog(@"My Name Is %@ Age Is %d Score Is %d",_name,_age,_score);
}
-(NSComparisonResult)compareStudent:(Student *)s2{ if(self.score<s2.score){
return NSOrderedAscending;
}else if (self.score>s2.score){
return NSOrderedDescending;
}else{
if(self.age<s2.age){
return NSOrderedAscending;
}else if (self.age>s2.age){
return NSOrderedDescending;
}else{
return [self.name compare:s2.name];
}
}
}
-(void)dealloc{
NSLog(@"student %@ dealloc",_name);
[_name release];
[super dealloc];
}
@end
3、main文件中的执行代码
NSMutableArray *array=[[NSMutableArray alloc]init];
Student *stu1=[Student studentWithName:@"zhangsan" andAge: andScore:];
Student *stu2=[Student studentWithName:@"lisi" andAge: andScore:];
Student *stu3=[Student studentWithName:@"wangwu" andAge: andScore:];
Student *stu4=[Student studentWithName:@"zhaoliu" andAge: andScore:];
Student *stu5=[Student studentWithName:@"tom" andAge: andScore:];
[array addObject:stu1];
[array addObject:stu2];
[array addObject:stu3];
[array addObject:stu4];
[array addObject:stu5];
[array sortUsingSelector:@selector(compareStudent:)];
for(Student *s in array){
[s print];
}
[array release];
4)performSelector 用于执行SEL封装的方法 例如: [p1 performSelector:@selector(jump)];
5)SEL 封装带参数的方法实例代码:
//将带一个参数的方法封装为SEL的变量,执行,参数是id类型
[p1 performSelector:@selector(print:) withObject:@"hello"];
6)NSSelectorFromString 用于将字符串形式的方法名封装成SEL的数据 实例代码:
SEL sel2=NSSelectorFromString(@"study");
[p1 performSelector:sel2];
7)_cmd 表示当前执行的方法 例如: NSLog(@"*****metheod:%@",NSStringFromSelector(_cmd));
8)在C语言中 __func__ 表示获取当前执行方法 例如: NSLog(@"func=%s",__func__);
__DATE__ 表示获取当前系统时间 NSLog(@"date=%s",__DATE__);
9)SEL实现数组排序 实例代码:
void testSel()
{
Person *p1;
Person *p2;
Person *p3;
NSMutableArray *array1=[[NSMutableArray alloc]initWithObjects:p1,p2,p3, nil];
[array1 sortUsingSelector:@selector(comparePerson:)]; }
六、构造OC中的二维数组 实例代码:
//创建一个空的外层数组
NSMutableArray *bigArray=[NSMutableArray array];
//创建一个存放4个数据对象的数组
NSMutableArray *array1=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array1 addObject:[NSNumber numberWithInt:i]];
}
//创建一个存放3个字符串的数组
NSMutableArray *array2=[[NSMutableArray alloc]init];
for(int i=;i<;i++){
[array2 addObject:[NSString stringWithFormat:@"str%d",i+]];
}
//将array1和array2两个数组对象存入外层数组(相当于创建了一个二维数组)
[bigArray addObject:array1];
[bigArray addObject:array2]; //遍历,显示所有的元素
for(int i=;i<bigArray.count;i++){
for(int j=;j<[bigArray[i] count];j++){
//取出数组中第i行第j列的元素(每行又是一个数组对象)
if([bigArray[i][j] isKindOfClass:[NSNumber class]]){
NSLog(@"number:%@",bigArray[i][j]);
}
else if ([[[bigArray objectAtIndex:i] objectAtIndex:j] isKindOfClass:[NSString class]]){
NSLog(@"string:%@",[[bigArray objectAtIndex:i] objectAtIndex:j]);
}
}
}
七、Class (类)的介绍
1)类的本质也是一个对象,是Class类型的对象,获取类对象(可以通过实例方法或类方法获取),
每个类只有一个类对象。
2)load 方法当程序启动时会加载所有的类和分类,调用load方法,先加载父类,再加载子类,然后是分类 例如:
+(void)load
{
NSLog(@"Person---load");
}
3)initialize方法 当第一次使用类的时候,调用initialize方法,先调用父类的,再调用子类的 例如:
+(void)initialize
{
NSLog(@"Person---initialize");
}
iOS阶段学习第16天笔记(Category-NSSet-SEL-NSIndexSet 操作)的更多相关文章
- iOS 阶段学习第十天笔记(字符串操作)
iOS学习(C语言)知识点整理 一.字符串的操作 1)字符串的存储,字符数组,在堆里面申请内存空间. 实例代码: #include <stdlib.h> #include <stri ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
- iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)
iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器 实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- iOS阶段学习第20天笔记(MRC内存管理)
iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效 OC中采用 ...
- iOS阶段学习第17天笔记(NSFileManager-NSFileHandle-文件操作)
iOS学习(OC语言)知识点整理 一.单例模式 1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象, 不管实例化单例对象多少次,只有一个对象 ...
- iOS阶段学习第14天笔记(NSString与NSMutableString)
iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...
- iOS 阶段学习第十天笔记(结构体)
iOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: stru ...
随机推荐
- 阿里巴巴B2B搜索学习
1.搜索业务 主搜索:商品搜索.商家搜索.采购搜索.app搜索 行业搜索:淘货源.淘工厂.聚好货.主题市场.品牌馆等 2.优势 由于用户多,需求强烈,收益大,所以功能.场景.架构做到极致高效. 代码复 ...
- WAMPServer 默认安装启动后,图标显示橙黄色
说明:我是在家的电脑上面学习的WAMPServer的,而家的电脑很干净.这次来学校以后,实验室的电脑被我经常的折磨,今天在安装以后,启动后,发现图标有红色到黄色,就停止了.其实,问题的根源很简单,某个 ...
- PMO、P3O
中国的大中型企业最近几年纷纷设立了项目管理办公室PMO,普遍关注如何发挥PMO最大的价值.而P3O指南描述了一个高阶的组织模型和机制,构建组织内部所有关于变革的决策支持与交付的结构及机制,允许永久的和 ...
- Atitit 视图状态ViewState)的原理与管理
Atitit 视图状态ViewState)的原理与管理 1.1. 视图状态ViewState的实现隐藏字段和url参数1 1.2. Asp.net的视图状态管理1 2. 1 2.1. H5的视图 ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- salesforce 零基础学习(三十八)Translate 的使用(国际化处理)
本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...
- MySql数据库乱码解决方法
MySql数据库乱码解决方法 解决乱码问题一个原则:存取系统使用一致的编码规则. 多使用mysql的原生命令行,这样才能做更多的事情. 第一步: 确认应用系统需要使用的编码 java的默认编码是跟 ...
- AngularJS中Directive指令系列 - scope属性的使用
文章是转的,我做下补充.原文地址:https://segmentfault.com/a/1190000002773689 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部 ...
- 用例设计工具PICT — 输入组合覆盖
1 成对测试简介 成对测试(Pairwise Testing)又称结对测试.两两测试,是一种正交分析的测试技术.成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的.是当不可能遍 ...
- hibernate(六) cascade(级联)和inverse关系详解
序言 写这篇文章之前,自己也查了很多的资料来搞清楚这两者的关系和各自所做的事情,但是百度一搜,大多数博文感觉说的云里雾里,可能博主自己清楚是怎么一回事,但是给一个不懂的人或者一知半解的人看的话,别人也 ...