技术标签: objective-c 再探Objective-C ios
• 本章是-Foundation框架里的其它常用类
• 【**】集合类【容器类】
• 字典【*】
• 【**】概念:字典是一个无序的集合,它使通过键值对的方式来存储数据的
• 【**】特点
• 一个 key(键) 对应 一个value(值)
• 做key的元素必须遵守NSCopying
• 我们一般使用NSString作为key
• 【*】NSDictionary
• 【**】概念:不可变字典,字典创建后里面的元素不可改变
• 【**】创建
• 通过简介构造方法[【少用】
• NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@1,@"a",@2,@"b",@3,@"c",nil];
• 通过初始化方法【少用】
• [[NSDictionary alloc]initWithObjects:values forKeys:keys];
• 快捷的创建方法[字面量]【常用】
• NSDictionary *dict = @{@"a":@1,@"b":@2,@"c":@3};
• 【**】获取字典的长度
• 字典中有多个键值对
• dict.count
• [dict count]
• 【**】获取某个key对应的元素
• [dictobjectForKey:@"a"];
• dict[@"a"];
• 【*】遍历
• 【*】先取出所有的key 或所有的值
• 然后通过遍历数组的方式来遍历
• [dict allKeys]
• [dict allValues]
• 【*】通过枚举器的方式
• NSEnumerator * enumer = [dict keyEnumerator];
• NSString *key;
• while (key = [enumer nextObject]) {
• NSLog(@"key = %@,value =%@",key,dict[key]);
• }
• 取出值的枚举器 [dict objectEnumerator];
• 【*】forin[常用]
• NSDictionary *dict =@{@"a":@1,@"b":@2,@"c":@3};
•
• for (NSString *key in dict) {
• NSLog(@"%@-%@",key,dict[key]);
• }
• 【*】block方式[比较常用]
• [dict enumerateKeysAndObjectsUsingBlock:^(idkey, id obj, BOOL *stop) {
•
• NSLog(@"key = %@,value =%@",key,obj);
•
• }];
• 字典与文件
• 写入文件
• [dictwriteToFile:@"/Users/lideshan/Desktop/test.plist" atomically:YES];
• 从文件中读取
• [NSDictionarydictionaryWithContentsOfFile:@"/Users/lideshan/Desktop/test.plist"];
• 【*】NSMutableDictionary
• 【**】可变字典,继承NSDictionary,可以对其中的元素进行增删改
• 【**】创建
• [NSMutableDictionary dictionary];
• [NSMutableDictionarydictionaryWithCapacity:10]
• 【*】添加或修改元素
• [dictM setObject:@4 forKey:@"d"];
• dictM[@"a"] = @10;
• 【*】删除元素
• 删除某个key对应的键值对
• [dictMremoveObjectForKey:@"a"]
• 删除数组中所有的key对应的键值对
• [dictMremoveObjectsForKeys:@[@"a",@"b"]];
• 删除字典中所有元素
• [dictM removeAllObjects];
• 【*】遍历的同时删除元素
• 字典不支持遍历同时删除元素
• 可以先通过遍历的方式找出所有要删除的key,放在数组中,然后通过 removeObjectsForKeys:来删除
• Set【*】
• 特点:无序,元素不可以重复,可以用快速去除数组中的重复元素,效率比数组要高
• NSSet
• 特点:不可以变,一经创建不能增删改
• 创建
• 通过数组创建
• 如数组有重复的元素该方法会去重
• [NSSet setWithArray:array]
• [NSSet setWithObjects:@1,@2,@3,nil];
• 注意:不能通过简便的方式[字面量]创建
• 判断是否包含某个元素
• [set containsObject:@1];
• 遍历
• forin【 常用】
• for (NSNumber*num in set) {
• NSLog(@"%@",num);
• }
• 通过枚举器【少用】
• NSEnumerator *enumer = [set objectEnumerator];
• NSNumber *number;
• while (number = [enumer nextObject]) {
• NSLog(@"%@",number);
• }
• NSSet 与NSArray 之间的转换
• NSArray 转NSSet
• NSSet *set = [NSSetsetWithArray:array]
• NSSet 转NSArray
• NSArray *array = [set allObjects];
• NSMutableSet
• 特点:可以增删元素
• 创建
• [NSMutableSet set];
• [NSMutableSet setWithCapacity:10];
• 添加
• [setM addObject:@1];
• 删除
• [setM removeObject:@1];
• 【**】集合类之间的转换
• NSArray 转 NSMutableArray
• [NSMutableArray arrayWithArray:array];
• NSDictionary 转 NSMutableDictionary
• [NSMutableDictionary dictionaryWithDictionary:dict];
• NSSet 转 NSMutableSet
• [NSMutableSet setWithSet:set];
• NSArray 转 NSSet
• NSSet *set = [NSSet setWithArray:array];
• NSSet 转 NSArray
• NSArray *array = [set allObjects]
• NSDictionary 转NSArray
• NSArray * keys = [dict allKeys];
• NSArray * values = [dict allValues];
• 【**】集合类中的内存管理
• MRC
• 当你把一个对象放在集合类中的时候,集合会对这个对象进行一次retain操作
• 当你把一个对象从集合类移除的时候,集合会对这个对象进行一次
• 当集合销毁的时候,会对集合类中的所有对象进行一次release的操作
• ARC
• 当你把一个对象添加到集合中,集合会对这个对象有一个强引用
• 当你吧一个对象从集合中移除的时候,集合会释放掉对这个对象的强引用
• 当集合销毁的时候,会释放掉集合中所有对象的强引用
• 【**】常用结构体
• NSRange
• 表示一个区间
• location 表示起点
• length 表示长度
• NSPoint/CGPoint
• 表示平面上一个点
• x 表示x坐标
• y 表示y坐标
• NSSize/CGSize
• 表示尺寸(大小)
• width 宽
• height 高
• NSRect/CGRect
• 表示平面上的一个区域
• origin 位置(CGPoint)
• size 尺寸(CGSize)
• 创建方法【**】
• CGPoint创建
• CGPointMake(CGFloat x, CGFloat y)
• CGSize创建
• CGSizeMake(CGFloat width, CGFloat height)
• CGRectMake 创建
• CGRectMake(CGFloat x, CGFloat y, CGFloatwidth, CGFloat height)
• 结构体转字符串【*】
• NSRange转字符串
• NSStringFromRange(NSRange range)
• NSPoint转字符串
• NSStringFromPoint(NSPoint aPoint)
• NSSize转字符串
• NSStringFromSize(NSSize aSize)
• NSRect 转字符串
• NSStringFromRect(NSRect aRect)
• 【**】基本数据类型包装类NSNumber
• 基本类转包装类型
• [NSNumbernumberWithInt:(int)];
• [NSNumber numberWithChar:(char)];
• [NSNumbernumberWithDouble:(double)];
• [NSNumbernumberWithFloat:(float)];
• [NSNumbernumberWithBool:(BOOL)];
• 包装类型转基本类型
• number.intValue;
• number.floatValue;
• number.doubleValue;
• number.charValue;
• number.boolValue
• 【**】 结构体的包装类NSValue
• 结构体转NSValue
• 常见结构体转换
• [NSValue valueWithRange:(NSRange)];
• [NSValue valueWithPoint:(NSPoint)];
• [NSValue valueWithSize:(NSSize)];
• [NSValue valueWithRect:(NSRect)];
• 自定义结构体转换
• [NSValue valueWithBytes:(const void *) valueobjCType:(const char *)] type]
• value 普通的结构体指针
• type @encode(C语言的结构体类型)
• typedef struct {
• double width;
• double height;
• } MYSize;
• MYSize size = {2,10};
• NSValue *value = [NSValuevalueWithBytes:&size objCType:@encode(MYSize)];
• NSValue 转结构体
• 常见结构转换
• value.rangeValue;
• value.pointValue;
• value.sizeValue;
• value.rectValue;
• 自定义结构体转换
• [value getValue:&size];
• 【*】NSDate
• 【**】创建日期
• NSDate *date = [NSDatedate];
• NSDate *da = [[NSDatealloc] init];
• + (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
• NSLog(@"%@",date);输出的时间是格林威治标准时间
• 本初子午线穿过哪里
• 【**】日期格式化
• // 创建日期
• NSDate *date = [NSDatedate];
• // 创建日期格式化器
• NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
• // 设置日期格式
• formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒Z";
• // yyyy:年 MM:月 dd:日hh:时 mm:分 ss:秒 Z代表时区
• // 将日期转换为指定格式的字符串
• NSString *dateStr = [formatter stringFromDate:date];
• NSLog(@"%@",dateStr);
• // 将格式字符串转为日期
• NSDate *newDate = [formatter dateFromString:dateStr];
• NSLog(@"%@",newDate);
• 【*】日期比较
• 判断两个日期是否相同
• BOOL isEqual = [date1 isEqualToDate:date2];
• 日期比较
• NSComparisonResult res = [date1 compare:date2];
• 返回两个日期中较早一个
• NSDate * earlierDate = [date1 earlierDate:date2];
• 返回两个日期中较晚的一个
• NSDate *laterDate= [date1 laterDate:date2];
• 【*】NSCalendar
• 日历:主要用于日期的计算
• 获取当前的日历对象
• NSCalendar *calendar = [NSCalendarcurrentCalendar];
• 取出日期的某一部分
• // 1.当前时间
• NSDate *now = [NSDatedate];
• // 2.创建一个日历对象
• NSCalendar *calendar = [NSCalendarcurrentCalendar];
• // 3.利用日历对象或者时间对象对应的年、月、日、时分秒
• int unit = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay;
• NSDateComponents *cmps = [calendar components:unit fromDate:now];
• // 4.打印时间的要素
• NSLog(@"%ld",cmps.day);
• 计算两个日期之间相差的时间
• NSString *time1 = @"2014-12-0820:50:40";
• NSString *time2 = @"2014-12-0418:45:30";
•
• NSDateFormatter *fmt = [[NSDateFormatteralloc] init];
• fmt.dateFormat = @"yyyy-MM-ddHH:mm:ss";
•
• NSDate *date1 = [fmt dateFromString:time1];
• NSDate *date2 = [fmt dateFromString:time2];
•
• // 1.创建一个日历对象
• NSCalendar *calendar = [NSCalendarcurrentCalendar];
•
• // 2.比较时间的差距
• int unit = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay
• | NSCalendarUnitHour | NSCalendarUnitMinute| NSCalendarUnitSecond;
• NSDateComponents *cmps = [calendarcomponents:unit fromDate:date2 toDate:date1 options:0];
•
• NSLog(@"相差%ld年%ld月%ld天%ld小时%ld分钟%ld秒", cmps.year,cmps.month, cmps.day,cmps.hour, cmps.minute,cmps.second);
• 在原来的日期的基础上添加时间
• NSDate *newDate = [calendar dateByAddingComponents:cmps toDate:date options:NSCalendarMatchStrictly];
• 【*】文件操作
• 【*】文件管理器NSFileManager
• 概念:该类是一个单例类,用于文件相关的操作
• 获取文件管理器
• NSFileManager * defaultManager= [NSFileManager defaultManager];
• 【*】判断是该路径下是否存在文件或文件夹
• BOOL isExist = [fileManagerfileExistsAtPath:path];
• BOOL isDir = NO;
• BOOL isExist = [fileManagerfileExistsAtPath:path isDirectory:&isDir];
• 如果是目录isDir的值为YES,
• 注意:1、这里传入的是一个BOOL类型的变量的地址
• 2、只有文件存在才会判断他是路径还是文件,如果路径或文件不存两个值都是NO
• 【*】文件权限
• 判断文件是否可读的
• BOOL isReadable =[fileManager isReadableFileAtPath:path];
• 判断文件是否是可写的
• BOOL isWritable =[fileManager isWritableFileAtPath:path];
• 【*】获取文件或目录的属性
• NSFileManager *fileManager = [NSFileManager defaultManager];
• NSString *path =@"/Users/lideshan/Desktop";
• NSError *error;
• NSDictionary *dict = [fileManager attributesOfItemAtPath:patherror:&error];
• NSLog(@"%@",dict);
• NSLog(@"%@",dict[@"NSFileSize"]);//我们可以通过这个属性获取文件的大小
• NSLog(@"%@",dict[NSFileSize]);//与上面的方式是等价的,我们通常使用这一种
•
• 【*】获取目录的内容
• 获得当前文件夹下的内容
• NSError *error = nil;
• NSArray *array = [fileManagercontentsOfDirectoryAtPath:path error:&error];
• 获得当前文件夹下及其子文件夹的内容
• NSError *error = nil;
• NSArray *array = [fileManagersubpathsOfDirectoryAtPath:path error:&error];
• 【*】拷贝文件(原文件保留)
• [fileManagercopyItemAtPath:src toPath:dest error:&error];
• 【*】移动文件(原文件会被删除)
• [fileManager moveItemAtPath:src toPath:desterror:&error];
• 【**】创建目录
• [fileManager createDirectoryAtPath:destwithIntermediateDirectories:NO attributes:nil error:&error];
• withIntermediateDirectories:是否要创建中间目录
• YES 表示创建中间目录
• NO 表示不创建中间目录
• attributes: 是目录的属性信息,nil表示使用默认属性
• 【**】创建文件
• [fileManager createFileAtPath:destcontents:data attributes:nil];
• 【**】NSData
• 概念: IOS中二进制文件使用NSData保存
• 音频、视频文件必须使用NSData来保存
• 把文件加载到内存
• NSData *data = [NSData dataWithContentsOfFile:path];
• 注意: NSData是不可变的Data类型,只能通过一次加载,完成所有的数据加载
• 把内存中的数据写入到文件中
• [data writeToFile:path atomically:YES];
• 【**】NSMutableData
• 当你需要把多个NSData数据拼接成一个数据存储的时候,就要使用NSMutableData
• NSMutableData *dataM = [NSMutableDatadata];
• [dataM appendData:data];
• 【*】NSObject
• 判断某个实例对象是否实现某个方法
• - (BOOL)respondsToSelector:(SEL)aSelector;
• 让某个实例对象动态去执行某个方法
• - (id)performSelector:(SEL)aSelector;
• - (id)performSelector:(SEL)aSelector withObject:(id)object;
• - (id)performSelector:(SEL)aSelector withObject:(id)object1withObject:(id)object2;
• 判断一个实例对象是否是一个类的实例对象
• - (BOOL)isMemberOfClass:(Class)aClass;
• 判断一个实例对象是否是一个类 或其子类的实例对象
• - (BOOL)isKindOfClass:(Class)aClass;
• 判断一个实例对象是否实现了某个协议
• - (BOOL)conformsToProtocol:(Protocol*)aProtocol;
• 【*】复制
• 不可变对象
• 一经创建不可增加、删除、修改的对象,只要是对对象中内容进行修改添加删除的操作的方法都会返回一个全新的对象,而原来的对象不受影响
• NSString,NSArray,NSDictionary,NSSet
• 可变对象
• 创建后可以进行增删改对象,可以在原来的对象的基础上进行增删改,当一个对象中的元素需要经常进行增删改的操作的时候,使用可变对象效率更高
• NSMutableString,NSMutableArray,NSMutableDictionary,NSMutableSet
• 浅复制
• 不会产生新对象的复制
• NSString调用copy : 浅复制
• 如果是不可变对象调用copy方法产出不可变副本,那么不会产生新的对象
• 深复制
• 会产生全新的对象的复制
• NSString调用mutableCopy : 深复制
• NSMutableString调用copy : 深复制
• NSMutableString调用mutableCopy : 深复制
• 可变对象上调用copy 或 mutableCopy都会产生一个全新的对象,不可变量对象调用 mutableCopy会产生一个新对象
• 复制与引用计数器
• 在MRC中,不可变对象调用copy方法,引用计数+1(NSString除外),不可变对象调用mutableCopy会产生一个全新的对象引用计数为1,可变对象调用copy 或mutableCopy都会产生一个全新的对象,引用计数为1
文章浏览阅读253次。cognos11同样适用于自定义java程序的第三方认证,而且在测试方面给了直观的测试接口,如下图所示当用户配置好了自定义java程序的认证之后,程序会提示用户输入我们自己的认证库用户信息例如admin 123456,通过认证以后,测显示如下启动服务可以在启动详情里面看到启动的过程中已经创建了新的命名空间说明第三方认证功能第一步已经配置OK了,是否成功还要接下来去cogno..._cjap
文章浏览阅读973次。By 超神经场景描述:利用 AI 技术判断一个人的情绪通常有两种途径,一种是通过面部表情,另一种是通过语音。前者已经比较成熟,而语音识别情感方面的研究,正在快速发展。近期...
文章浏览阅读744次。强烈推荐的机器学习,深度学习课程以及python库张冰洋9 个月前本着两条原则推荐一波机器学习,深度学习的课程以及常用的库:1.不建议报辅导班。不是因为我们不应该为学习知识付费, 而是因为有更好的资源,而这些资源恰好免费。报辅导班学习浪费钱倒是次要的,主要是时间有限,所以我们要把最好的时间集中在最高效的事情上。2.视频资源种类繁多,但我只选最有价值的。Are y_机器学习深度学习谁讲得好
文章浏览阅读2.2k次。python:1.语法强制缩进2.区分大小写:iLoop与iloop是两个变量3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用4.变量类型:数字,字符串等等5.基本语句为赋值语句x=y,数学运算x=y+/-/*//z,比较运算:==,=,等,条件语句ifelse,循环语句for,循环语句while6.内置函数7.类与类方法按这个顺序每步..._python基本代码大全
文章浏览阅读197次。本文总结了交通灯控制技术的发展,讨论了基于PLC的十字路口交通信号灯控制系统的设计可行性。根据PLC的工作原理并结合城市交通的实际状况,本文提出了以三菱公司生产的FX2N-128MT-001型PLC作为基本控制核心,安排了四个方向的直行、左转红黄绿灯,人行道红绿灯以及倒计时数码管的具体配置;随着社会的发展和进步以及人民生活水平的提高,上路的车辆越来越多,但相应的公路设施却没有相应的改善,这就导致了城市交通拥堵问题突出,而且拥堵的地方多是十字路口等车辆汇集处。信号灯无线遥控系统的设计。信号灯控制系统的设计。_智能交通灯三菱plc接线图解
文章浏览阅读1.6k次,点赞29次,收藏28次。1.进程间通信的分类:(1)管道:1、匿名管道pipe;2、命名管道mkfifo(2)System V IPC:1、System V 消息队列;2、System V 共享内存;3、System V 信号量。(3)POSIX IPC:1、消息队列;2、共享内存;3、信号量;4、互斥量;5、条件变量;6、读写锁。前面已经了解了进程间管道通信,那么共享内存又是什么原理?_进程间的通信共享内存
文章浏览阅读257次。ls命令是linux下最常用的命令。_linux ls -lp
文章浏览阅读8k次。很多git的初学者会在关联一个远程库这里出现错误,当然, 我也是,如果你也遇到了 这个问题,那么看了这篇,你就会解决该问题了。运行命令:git remote add origin [email protected]:yourgithubusername/learngit.git出现下列错误:fatal: Not a git repository (or any of t..._fatal: not a git repository (or any parent up to mount point /home)
文章浏览阅读208次。如图如果在编写灵活sql语句时,在中间想要注解的话,不能使用自动注解ctrl+?,系统会告诉你用的符号或字符有错误,我找了一下午愣是没找出哪里写错了,去看前台的控制台,说是我total是空,这个我是赋值为0的怎么可能为空的呢。前端控制台一个错误,后端一个错误,不知道信谁(虽然很多时候前台的错误是在发癫),我也只能去看看前台的问题,结果一脸懵,又重头到尾看了一下午,最后重新打了一遍成功了。原因是后台sql的灵活书写,中间不能使用ctrl+?
文章浏览阅读1.2k次,点赞34次,收藏5次。From:http://blog.csdn.net/is2120/article/details/44317241下面是转载的在博客上看到的一个C++书籍阅读清单,可以参考下: 阶段 1 《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。 《C++ Primer》 本书对C++基本概念、技术、以及现_effettive c++ more effectivec++ 系列
文章浏览阅读2k次,点赞10次,收藏16次。本手册面向系统管理员及相关技术人员,实现在服务器整机上使用图形化界面快速完成银河麒麟高级服务器操作系统 V10(以下简称“银河麒麟服务器操作系统”)的安装。重要:针对不同 CPU 平台可能有少许差异,本手册尽量加以说明;如未提到之处,以各硬件平台实际安装情况及输出信息为准。在【安装信息摘要】页面配置所有与安装相关的信息,如下图所示:图 5-1 安装信息摘要您可以点击相应配置项的图标进入配置页面,需要注意的是【软件】和【系统】两类配置。安装程序会自动检测各个配置项;_银河麒麟服务器操作系统 v10
文章浏览阅读88次。mvn -v查看maven的版本-compile 编译-test 测试clean 删除targetinstall 安装jar包到本地仓库mvn archetype generate 自动创建maven目录groupid 公司名+项目名artifactid 项目名+模块名仓库分为本地仓库和远程仓库<build> <plugins&g...