一、结构体
NSRange:表示范围,location位置(unsignedlong),length长度(unsigned long)
NSPoint\CGPoint:表示一个点,x(CGFloat\double),y(CGFloat\double)
NSSize\CGSize:表示ui的尺寸,width宽度(CGFloat\double),height高度(CGFloat\double)
NSRect\CGRect:表示位置大小,CGPoint和CGSize
- #import <Foundation/Foundation.h>
- int main(int argc, const charchar * argv[])
- {
- // NSRange
- //@"i love oc" // love的范围
- // 位置2,长度4
- NSRange r1 = {2, 4};
- NSRange r2 = {.location = 2, .length = 4};
- NSRange r3 = NSMakeRange(2, 4); // 需要掌握
- NSString *str = @"i love oc";
- // 查找某个字符串在特定字符串的范围
- // 如果找不到,length = 0,location = NSNotFound == -1
- NSRange range = [str rangeOfString:@"love"];
- // NSPoint\CGPoint
- NSPoint p1 = NSMakePoint(11, 11);
- CGPoint p2 = CGPointMake(1, 1); // 最常用
- // CG开头函数是在CoreGraphics框架定义的,运行时需要将其加入
- // 表示原点
- //CGPointZero == CGPointMake(0, 0)
- // 点与点比较
- CGPointEqualToPoint(CGPointMake(1, 1), CGPointMake(11, 11));
- // NSSize\CGSize
- NSSize s1 = NSMakeSize(1, 1);
- CGSize s2 = CGSizeMake(11, 11); // 开发中常用CG
- //CGSizeZero == CGSizeMake(0, 0)
- // 比较尺寸
- CGSizeEqualToSize(CGSizeMake(1, 1), CGSizeMake(1, 1));
- // NSRect\CGRect
- CGRect rt1 = CGRectMake(0, 0, 10, 10);
- CGRect rt2 = {{0, 0}, {11, 11}};
- //CGRectZero == CGRectMake(0, 0, 0, 0)
- // CGRect比较
- CGRectEqualToRect(CGRectMake(0, 0, 1, 1), CGRectMake(0, 0, 1, 1));
- // CGRect是否包含点
- CGRectContainsPoint(CGRectMake(11, 11, 22, 22), CGPointMake(33, 33));
- // 将结构体装化为字符串
- NSString *str1 = NSStringFromRange(r1);
- NSLog(@"%@", str1);
- NSString *str2 = NSStringFromPoint(p1);
- NSLog(@"%@", str2);
- NSString *str3 = NSStringFromSize(s1);
- NSLog(@"%@", str3);
- NSString *str4 = NSStringFromRect(rt1);
- NSLog(@"%@", str4);
- return 0;
- }
二、Foundation中的常用类
NSString:不可变字符串
NSMutableString:可变字符串
- /*
- NSString:不可变字符串
- NSMutableString:可变字符串
- */
- // 1.字符串的创建
- NSString *s1 = @"jack";
- NSString *s2 = [[NSString alloc] initWithString:s1];
- NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 11];
- // c字符串转oc字符串
- NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
- // oc字符串转c字符串
- const charchar *cs = [s4 UTF8String];
- // 从文件中读取内容
- NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/hhb/Documents/code/other/other/main.m" encoding:NSUTF8StringEncoding error:nil];
- //URL:资源路径
- // 协议头://路径
- // 本地资源 file://
- // ftp://
- // http://
- NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];
- //file:///Users/zhouxf/Documents/code/other/other/main.m
- NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
- NSLog(@"%@", s6);
- /*
- NSString类中有对象方法initWithXXX,一般就有对应的对象方法stringWithXXX与之配对
- 其他类也是如此
- [NSString stringWithFormat:<#(NSString *), ...#>] == [[NSString alloc] initWithFormat:<#(NSString *), ...#>]
- */
- // 将字符串写入文件,writeToFile\writeToURL
- [@"jack\nrose" writeToFile:@"/Users/hhb/Documents/code/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
- // 拼接内容到字符串后创建新字符串
- NSString *ns = [s1 stringByAppendingString:@"rose"];
- // 可变字符串
- NSMutableString *ms1 = [NSMutableString stringWithFormat:@"age is 10"];
- // 直接将拼接到可变字符串后面
- [ms1 appendFormat:@"%d %d", 11, 1];
- // 删除某个范围的字符串
- NSRange range = [ms1 rangeOfString:@"is"];
- [ms1 deleteCharactersInRange:range];
(NSArray、NSSet、NSDictionary统称为集合类)
NSArray:不可变数组
NSMutableArray:可变数组
--> 有序;
--> 快速创建(不可变):@[obj1,obj2, obj3]
--> 快速访问元素:数组名[i]
- // 集合类
- /*
- NSArray:不可变数组
- NSMutableArray:可变数组
- */
- // oc数组不能存放nil值
- // oc数组只能存放oc对象、不能存放非oc对象类型,比如int、struct、enum等
- //这个array就是空数组,而且不可变
- //NSArray *array = [NSArray array];
- NSArray *array2 = [NSArray arrayWithObject:@"jack"];
- // nil是数组元素结束的标记
- NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", @"jim", nil nil];
- // 快速创建oc数组对象,编译器特性
- NSArray *array4 = @[@"jack", @"rose"];
- // 获取数组元素个数
- //[array2 count];
- NSLog(@"%ld", array2.count);
- // 访问数组元素
- NSLog(@"%@", [array3 objectAtIndex:1]);
- NSLog(@"%@", array3[1]); // 编译器新特性,使用c数组访问方式
- // 遍历数组
- for (int i = 0; i < array3.count; i++) {
- NSLog(@"%@", array3[i]);
- }
- // 快速遍历数组
- // id obj 代表着数组中的每一个元素
- for (id obj in array3) {
- // obj在数组中的位置
- NSUInteger i = [array3 indexOfObject:obj];
- NSLog(@"%ld:%@", i, obj);
- }
- // 每遍历一个元素就调用一次block
- // 并且把当前元素和位置当作参数传给block
- // stop:停止标志符, *stop = YES时停止遍历
- [array3 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOLBOOL *stop) {
- NSLog(@"%ld:%@", idx, obj);
- if (idx == 1) {
- *stop = YES;
- }
- }];
- // 创建可变数组
- NSMutableArray *ma = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil nil];
- // 增加元素
- [ma addObject:@"jack"];
- [ma addObject:@"jack1"];
- [ma addObject:@"jack2"];
- // 删除指定对象的元素
- [ma removeObject:@"jim"];
- // 删除指定位置的元素
- [ma removeObjectAtIndex:0];
- // 删除最后元素
- [ma removeLastObject];
- // 删除所有元素
- [ma removeAllObjects];
NSSet:不可变set
NSMutableSet:可变set 无序
与NSArray比较:
--> 共同点
都是集合,都能存放多个oc对象
只能存放oc对象,不能存放非oc对象(int、char、float等,结构体,枚举)
本身不可变,都有一个可变的子类
--> 不同点
NSArray有序,NSSet无序
- /*
- NSSet:不可变set
- NSMutableSet:可变字set
- */
- // 创建不可变set
- NSSet *set1 = [NSSet setWithObjects:@"jack", @"rose", nil nil];
- // 随机访问一个元素
- NSString *str = [set1 anyObject];
- // 创建可变set
- NSMutableSet *mset = [NSMutableSet set];
- // 增加元素
- [mset addObject:@"jack"];
- [mset addObject:@"jack1"];
- // 删除元素
- [mset removeObject:@"jack"];
NSDictionary:不可变字典
NSMutableDictionary:可变字典
--> 无序
--> 快速创建(不可变):@{key1:obj1,key2:obj2, key3:obj3}
--> 快速访问元素:字典名[key]
- /*
- NSDictionary:不可变字典
- NSMutableDictionary:可变字典
- */
- // 创建不可变字典
- NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
- NSArray *keya = @[@"name", @"age", @"address"];
- NSArray *obja = @[@"jack", @11, @"北京"];
- NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:obja forKeys:keya];
- NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
- @"jack", @"name",
- @"北京", @"address"
- ,nil];
- // 快速创建字典,编译器特性
- NSDictionary *dict4 = @{@"name": @"jack", @"address": @"北京"};
- // 访问元素
- [dict objectForKey:@"name"];
- // 快速访问元素,编译器特性
- id obj = dict[@"name"];
- // 创建可变字典
- NSMutableDictionary *md = [NSMutableDictionary dictionary];
- // 增加或更新元素
- [md setObject:@"jack" forKey:@"name"];
- [md setObject:@"北京" forKey:@"address"];
- [md setObject:@"rose" forKey:@"name"];
- [md setObject:@"1111" forKey:@"qq"];
- // 删除元素
- [md removeObjectForKey:@"name"];
- NSLog(@"%@", md);
- // 遍历
- NSArray *ka = [md allKeys];
- for (int i = 0; i < md.count; i++) {
- NSLog(@"%@:%@", ka[i], md[ka[i]]);
- }
- // 遍历
- [md enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOLBOOL *stop) {
- NSLog(@"%@=%@", key, obj);
- }];
NSNumber:数字类,将数字包装成oc对象
数字转NSNumber
NSNumber *num = [NSNumbernumberWithInt:11];
NSNumber转数字
int i =[num intVaule];
快速创建NSNumber对象,编译器特性
@20;
@10.1;
@YES;
@’a’;
int age = 20; @(age);
NSVaule:能将任何数据类型都能包装成oc对象
将结构体CGPoint包装成NSVaule对象
NSVaule *v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];
从NSVaule对象获取CGPoint的值
[v pointVaule];
NSDate:日期类
- /*
- NSDate:日期类
- */
- // 创建时间对象(当前时间)
- NSDate *date = [NSDate date];
- // 打印的时0时区时间
- NSLog(@"%@", date);
- // 创建比date晚5秒的时间对象
- NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
- // 计算utc时间,单位:秒
- /*double*/NSTimeInterval sec = [date2 timeIntervalSince1970];
- // 日期格式化类
- NSDateFormatter *df = [[NSDateFormatter alloc] init];
- // 设计日期格式
- // y 年 M 月 d 日
- // m 分 s 秒 H (24)时 h (12)时
- df.dateFormat = @"yyyy-MM-dd HH:mm:ss";
- // 日期转字符串
- NSString *ds = [df stringFromDate:date2];
- NSLog(@"%@", ds);
- NSString *time = @"2011/11/11 11:11";
- df.dateFormat = @"yyyy/MM/dd HH:mm";
- // 字符串转时间
- NSDate *dt = [df dateFromString:time];
- NSLog(@"%@", dt);
练习:计算代码行数
-
- #import <Foundation/Foundation.h>
- NSUInteger linesFromFile(NSString *path)
- {
- // 获取文件管理者(单列对象)
- NSFileManager *fm = [NSFileManager defaultManager];
- // 是否是目录标志符
- BOOL isDir = NO;
- // 判断路径是否存在
- BOOL isEx = [fm fileExistsAtPath:path isDirectory:&isDir];
- // 路径不存在
- if (!isEx) {
- NSLog(@"the file of path:%@ is no exist!", path);
- return 0;
- }
- // 是目录
- if (isDir) {
- NSUInteger count = 0;
- // 获取目录中的内容:即文件和子目录
- NSArray *nameArray = [fm contentsOfDirectoryAtPath:path error:nil];
- // 遍历
- for (NSString *name in nameArray) {
- // 拼接全路径
- NSString *fileName = [NSString stringWithFormat:@"%@/%@", path, name];
- // 递归计算行数
- count += linesFromFile(fileName);
- }
- return count;
- } else {
- // 获取文件扩展名(忽略大小写)
- NSString *extension = [[path pathExtension] lowercaseString];
- // 对文件进行过滤
- if (![extension isEqualToString:@"h"]
- && ![extension isEqualToString:@"c"]
- && ![extension isEqualToString:@"m"]) {
- return 0;
- }
- // 读取文件内容
- NSString *fileContents = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
- // 通过换行符分割
- NSArray *fileLines = [fileContents componentsSeparatedByString:@"\n"];
- // 去掉文件的公共路径
- NSRange range = [path rangeOfString:@"/Users/hhb/Documents/code/"];
- NSString *file = [path stringByReplacingCharactersInRange:range withString:@""];
- // 打印文件路径和行数
- NSLog(@"%@:%ld", file, fileLines.count);
- // 返回行数
- return fileLines.count;
- }
- }
- int main(int argc, const charchar * argv[])
- {
- NSString *path = @"/Users/hhb/Documents/code";
- NSUInteger count = linesFromFile(path);
- NSLog(@"lines count = %ld", count);
- return 0;
- }