Foundation基础框架

时间:2021-05-30 15:53:10

自己总结的

 //
// main.m
// 01-结构体
//
// Created by Mac-ZhangXiaoMeng on 14/12/29.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { // 一、NSRang的基本使用
//
// NSRange(location位置 length长度)   表示范围
//
// NSPoint\CGPoint   表示坐标
//
// NSSize\CGSize   表示UI元素的尺寸
//
// NSRect\CGRect (CGPint CGSize) 表示一个UI元素的位置和尺寸 /* 1 @"i love oc" // love的范围 NSRange r1 = {2, 4}; // 不用
NSRange r2 = {.location = 2, .length = 4};// 不用 NSRange r3 = NSMakeRange(2, 4); 掌握 */ /* 2
NSString *str = @"i love oc"; // 查找某个字符串在str中的范围
// 如果找不到,length=0, location=NSNotFound == -1
NSRange range = [str rangeOfString:@"love"];
NSLog(@"loc = %ld, length=%ld", range.location, range.length);
*/ // 3. CGPoint p1 = NSMakePoint(10, 10);
// NSPoint p2 = CGPointMake(20, 20);// 最常用
// // 4. NSSize s1 = NSMakeSize(100, 50);
// NSSize s2 = CGSizeMake(100, 50);
// CGSize s3 = NSMakeSize(200, 60); // 5. CGRect r1 = CGRectMake(0, 0, 100, 50); // 6. // 将结构体转为字符串
//
// NSString *str = NSStringFromPoint(p1);
//
// NSString *str = NSStringFromSize(s3);
//
// NSString *str = NSStringFromRect(r1);
//
// NSLog(@"%@", str);
// 7. 表示原点
// CGPointZero == CGPointMake(0, 0) // 8. 比较两个点是否相同(x、y)
// BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
//CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>) // 9. 右边点是否在矩形块里 x (50, 150) y (40 , 90)
// BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));
//
// NSLog(@"%d", b2); }
return ;
}
 //
// main.m
// 字符串
//
// Created by Mac-ZhangXiaoMeng on 14/12/29.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { /*
NSString : 不可变字符串 NSMutableString : 可变字符串
*/ // 1.字符串的创建
// */
// NSString *s1 = @"jack";
//
// NSString *s2 = [[NSString alloc] initWithString:@"jack"];
//
// NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
//
//
// C字符串 --> OC字符串
// NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串 --> C字符串
// const char *cs = [s4 UTF8String]; // NSUTF8StringEncoding 用到中文就可以用这种编码
// NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil]; // URL : 资源路径
// 协议头://路径
// file://
// ftp://
// http://weibo.com/a.png // http://www.baidu.com // NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"]; // NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];
//
// NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
// NSLog(@"s6=\n%@", s6); /*
一般都会有一个 类方法 跟对象方法配对
[NSURL URLWithString:<#(NSString *)#>]; [NSString stringWithFormat:@""]; 文件:
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>]; */ //
// 3. void stringExport()
// {
// // 字符串的导出
// [@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
//
//
// NSString *str = @"4234234";
// NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
// [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
// } // 4.
//
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
// 拼接内容到s1的后面
[s1 appendString:@"11 12"]; // 获取is的范围
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range]; //删掉is NSString *s2 = [NSString stringWithFormat:@"age is 10"]; //又创建一个字符串
NSString *s3 = [s2 stringByAppendingString:@" 11 12"]; NSLog(@"s1=%@\n, s2=%@\n,s3=%@\n", s1, s2,s3);
// // //快速视频 //#pragma mark 字符串的大小写处理
// void caseTest() {
// NSString *str = @"GuangDong";
// // 转成大写
// NSLog(@"大写:%@", [str uppercaseString]);
// // 转成小写
// NSLog(@"小写:%@", [str lowercaseString]);
// // 首字母变大写,其他字母变小写
// NSLog(@"首字母变大写:%@", [@"aGE" capitalizedString]);
// }
//
//#pragma mark 字符串的比较
// void compare() {
// // 检测字符串的内容是否相同
// BOOL result = [@"abc" isEqualToString:@"abc"];
// NSLog(@"%i", result);
//
// // NSOrderedAscending 右边的字符串比左边大
// // NSOrderedSame 两个字符串的内容相同
// // NSOrderedDescending 左边的字符串比右边的大
// NSComparisonResult result2 = [@"abc" compare:@"Abc"];
// if (result2 == NSOrderedSame) {
// NSLog(@"两个字符串的内容相同");
// } else if (result2 == NSOrderedAscending) {
// NSLog(@"右边 > 左边");
// } else if (result2 == NSOrderedDescending) {
// NSLog(@"右边 < 左边");
// }
// }
//
//#pragma mark 字符串的搜索
// void search() {
// NSString *str = @"123456456.txt";
//
// NSLog(@"是否以22开头:%i", [str hasPrefix:@"22"]);
// NSLog(@"是否以txt结尾:%i", [str hasSuffix:@"txt"]);
//
// // 搜索字符串
// NSRange range = [str rangeOfString:@"456"];
// // range.length == 0
// if (range.location == NSNotFound) {
// NSLog(@"不能找到");
// } else {
// NSLog(@"找到的范围是:%@", NSStringFromRange(range));
// }
//
// // 从尾部开始搜索字符串
// range = [str rangeOfString:@"456" options:NSBackwardsSearch];
// NSLog(@"%@", NSStringFromRange(range));
//
// // 指定范围进行搜索
// // [str rangeOfString:@"456" options:NSBackwardsSearch range:<#(NSRange)#>];
// }
//
//#pragma mark 字符串的截取
// void subString() {
// NSString *str = @"123456";
//
// // 从索引3开始截取到尾部(包括3)
// NSLog(@"%@", [str substringFromIndex:3]);
//
// // 从头部开始截取到索引3之前(不包括3)
// NSLog(@"%@", [str substringToIndex:3]);
//
// // 指定范围进行截取
// NSRange range = NSMakeRange(2, 3);
// NSLog(@"%@", [str substringWithRange:range]);
//
// NSString *str2 = @"a-b-c-d-5";
// NSArray *array = [str2 componentsSeparatedByString:@"-"];
// NSLog(@"%@", array);
//
// NSString *str3 = [array objectAtIndex:0];
// NSLog(@"%@", str3);
// }
//
//#pragma mark 与路径相关
// void pathTest() {
// // 快速创建一个自动释放的数组
// NSMutableArray *components = [NSMutableArray array];
// [components addObject:@"Users"];
// [components addObject:@"MJ"];
// [components addObject:@"Desktop"];
// // 将数组中的所有字符串拼接成一个路径
// NSString *path = [NSString pathWithComponents:components];
// NSLog(@"%@", path);
//
// // 将路径分解成一个数组
// NSArray *cmps = [path pathComponents];
// NSLog(@"%@", cmps);
//
// // path是一个字符串常量,是不可变的
// path = @"/users/mj/test";
// // 判断是够为绝对路径(依据是前面有无/)
// NSLog(@"%i", [path isAbsolutePath]);
// NSLog(@"最后一个目录:%@", [path lastPathComponent]);
// // 删除最后一个目录
// NSLog(@"%@", [path stringByDeletingLastPathComponent]);
// // 在最后面拼接一个目录
// NSLog(@"%@", [path stringByAppendingPathComponent:@"abc"]);
// }
//
//#pragma mark 拓展名处理
// void extension() {
// NSString *str = @"/User/MJ/test.txt";
//
// NSLog(@"拓展名:%@", [str pathExtension]);
// // 删除拓展名
// NSLog(@"%@", [str stringByDeletingPathExtension]);
// // 添加拓展名
// NSLog(@"%@", [@"abc" stringByAppendingPathExtension:@"mp3"]);
// }
//
//#pragma mark 其他用法
// void other() {
// NSString *str = @"12";
// int a = [str intValue];
// NSLog(@"%i", a);
//
// // 计算字数,不是计算字符数
// NSLog(@"length=%zi", [@"我是字符串123" length]);
//
// // 取出对应的字符
// unichar c = [@"abc" characterAtIndex:0];
// NSLog(@"%c", c);
//
// // 返回C语言中的字符串
// const char *s = [@"abc" UTF8String];
// NSLog(@"%s", s);
// }
// //#pragma mark 可变字符串的创建
// void stringCreate() {
// // 预先分配10个字数的存储空间
// NSMutableString *str = [[NSMutableString alloc] initWithCapacity:10];
// // 设置字符串内容
// [str setString:@"1234"];
//
// // 拼接一个字符串
// [str appendString:@"567"];
// // 拼接字符串
// [str appendFormat:@"age is %i and height is %.2f", 27, 1.55f];
//
// // 替换字符串
// NSRange range = [str rangeOfString:@"height"];
// //NSRange range = NSMakeRange(7, 3);
// [str replaceCharactersInRange:range withString:@"no"];
//
// // 插入字符串
// [str insertString:@"abc" atIndex:2];
//
// // 删除字符串
// range = [str rangeOfString:@"age"];
// [str deleteCharactersInRange:range];
//
// NSLog(@"%@", str);
//
// // 释放对象
// [str release];
// } }
return ;
}
 //
// main.m
// NSArray
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool { /* NSArray :不可变数组
NSMutableArray : 可变数组 */ //NSArray *array = @[@"jack", @"rose"]; /* 1.
int a = 5; int ages[10] = {1, 90, 89, 17}; Person *p = [[Person alloc] init];
Person *persons[5] = {p, [[Person alloc] init]};
*/ // OC数组不能存放nil值
// OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等 // 这个array永远是空数组
// NSArray *array = [NSArray array]; /*
2.NSArray的创建 NSArray *array2 = [NSArray arrayWithObject:@"jack"]; // nil是数组元素结束的标记,有2个元素不可变
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil]; //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil]; // 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"]; */ /* 2.NSArray的元素个数 NSLog(@"%ld", array3.count); 3.NSArray中元素的访问 NSLog(@"%@", [array3 objectAtIndex:1]); //array3[1];
NSLog(@"%@", array3[0]); */ // 4.遍历数组 // Person *p = [[Person alloc] init];
//
//
// NSArray *array = @[p, @"rose", @"jack"];
// // 第一种
// for (int i = 0; i<array.count; i++)
// {
// NSLog(@"%i-%@", i,array[i]);
// } //第二种
//快速遍历
// id obj代表着数组中的每一个元素
// int i = 0;
// for (id obj in array)
// {
// // 找出obj元素在数组中的位置
// //NSUInteger i = [array indexOfObject:obj];
//
// NSLog(@"%ld - %@", i, obj);
// i++;
//
// if (i==3)
// {
// break;
// }
// }
// // 第三种
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block // [array enumerateObjectsUsingBlock:
//
// ^(id obj, NSUInteger idx, BOOL *stop)
// {
// NSLog(@"%ld - %@", idx, obj);
//
//
// if (idx == 1)
// {
// // 停止遍历
// *stop = YES;
// }
//
// }]; //6. 可变数组的基本使用
//
// NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
//
// // 添加元素
// //[array addObject:[[Person alloc] init]];
//
// [array addObject:@"jack"];
//
// // 删除所有元素
// //[array removeAllObjects];
// // 删除指定的对象
// // [array removeObject:@"jack"];
// //[array removeObjectAtIndex:0];
//
//
// // [array addObject:nil];// 错误写法
//
//
// NSLog(@"%@", array);
//
// NSLog(@"%ld", array.count);
//
//
//
// // @[] 只创建不可变数组NSArray
// /* 错误写法
// NSMutableArray *array = @[@"jack", @"rose"];
//
// [array addObject:@"jim"];
// */ //4. 快速视频 //#pragma mark 创建一个数组
// void arrayCreate() {
// // 创建一个空的数组
// NSArray *array = [NSArray array];
//
// // 创建有1个元素的数组
// array = [NSArray arrayWithObject:@"123"];
//
// // 创建有多个元素的数组
// array = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
//
// int count = [array count];
// // count = array.count;
// NSLog(@"%i", count);
// }
//
//#pragma mark 数组的简单使用
// void arrayUse() {
// NSObject *obj = [[NSObject alloc] init];
// NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"c" , obj, nil];
// // 判断是否包含了某个元素
// if ([array containsObject:@"a"]) {
// NSLog(@"包含了字符串a");
// }
//
// NSString *last = [array lastObject];
// NSLog(@"last=%@", last);
//
// NSString *str = [array objectAtIndex:1];
// NSLog(@"%@", str);
//
// int index = [array indexOfObject:@"c"];
// NSLog(@"index=%i", index);
//
// [obj release];
// }
//
//#pragma mark 数组的内存管理
// void arrayMemory() {
// // 1
// Student *stu1 = [[Student alloc] init];
// Student *stu2 = [[Student alloc] init];
// Student *stu3 = [[Student alloc] init];
//
// NSLog(@"stu1:%zi", [stu1 retainCount]);
//
// // 当把一个对象塞进数组中时,这个对象的计数器会加1,也就是说数组会对它做一次retain操作
// // 2
// NSArray *array = [[NSArray alloc] initWithObjects:stu1, stu2, stu3, nil];
//
// NSLog(@"stu1:%zi", [stu1 retainCount]);
//
// NSLog(@"count=%zi", array.count);
//
// // 1
// [stu1 release];
// [stu2 release];
// [stu3 release];
//
// // 数组被销毁的时候,会对内部的所有元素都做一次release操作
// // 0
// [array release];
// }
//
//#pragma mark 给数组里面的元素发送消息
// 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)];
// [array makeObjectsPerformSelector:@selector(test2:) withObject:@"123"];
// }
//
//#pragma mark 遍历数组1
// void arrayFor1() {
// Student *stu1 = [Student student];
// NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// int count = array.count;
// for (int i = 0; i<count; i++) {
// // id == void *
// id obj = [array objectAtIndex:i];
// NSLog(@"%i-%@", i, obj);
// }
// }
//
//#pragma mark 遍历数组2
// void arrayFor2() {
// Student *stu1 = [Student student];
// NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// // 快速遍历
// int i =0;
// for (id obj in array) {
// NSLog(@"%i-%@", i, obj);
// i++;
// }
// }
//
//#pragma mark 遍历数组3
// void arrayFor3() {
// Student *stu1 = [Student student];
// NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
// [array enumerateObjectsUsingBlock:
// ^(id obj, NSUInteger idx, BOOL *stop) {
// NSLog(@"%i-%@", idx, obj);
//
// // 如果索引为1,就停止遍历
// if (idx == 1) {
// // 利用指针修改外面BOOL变量的值
// *stop = YES;
// }
// }];
// }
//
//#pragma mark 遍历数组4
// void arrayFor4() {
// Student *stu1 = [Student student];
// NSArray *array = [NSArray arrayWithObjects:stu1, @"1", @"2", @"3", nil];
//
// // 获取数组的迭代器
// // NSEnumerator *enumerator = [array objectEnumerator];
// // 反序迭代器(从尾部开始遍历元素)
// NSEnumerator *enumerator = [array reverseObjectEnumerator];
//
// // allObjects是取出没有被遍历过的对象
// NSArray *array2 = [enumerator allObjects];
// NSLog(@"array2:%@", array2);
//
// // 获取下一个需要遍历的元素
// id obj = nil;
// while (obj = [enumerator nextObject]) {
// NSLog(@"obj=%@", obj);
// }
// }
//
// //
//#pragma mark 派生出新的数组
// void arrayNew() {
// NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
//
// NSArray *array2 = [array arrayByAddingObject:@"3"];
//
// NSArray *array3 = [array arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:@"4", @"5", nil]];
//
// NSLog(@"array:%@", array);
// NSLog(@"array2:%@", array2);
// NSLog(@"array3:%@", array3);
//
//
// NSArray *array4 = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
// NSRange range = NSMakeRange(1, 2);
// NSArray *array5 = [array4 subarrayWithRange:range];
// NSLog(@"array5:%@", array5);
// }
//
//#pragma mark 数组的其他用法
// void arrayOther() {
// NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
// // 1-2-3-4
// // 利用分隔符-拼接所有的数组元素
// NSString *str = [array componentsJoinedByString:@"-"];
// NSLog(@"%@", str);
//
// // 将一个数组写入文件(生成的是一个xml文件)
// NSString *path = @"/Users/apple/Desktop/array.xml";
// [array writeToFile:path atomically:YES];
//
//
// path = @"/Users/apple/Desktop/array.txt";
// // 从文件中读取数组内容(文件有严格的格式要求)
// NSArray *array2 = [NSArray arrayWithContentsOfFile:path];
// NSLog(@"array2:%@", array2);
// }
//
//#pragma mark 数组排序1
// void arraySort1() {
// NSArray *array = [NSArray arrayWithObjects:@"2", @"3", @"1", @"4", nil];
//
// // 返回一个排好序的数组,原来数组的元素顺序不会改变
// // 指定元素的比较方法:compare:
// NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
// NSLog(@"array2:%@", array2);
// }
//
//#pragma mark 数组排序2
// void arraySort2() {
// Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
// Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
// Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
// Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
// NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
//
// // 指定排序的比较方法
// NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];
//
// NSLog(@"array2:%@", array2);
// }
//
//#pragma mark 数组排序3
//
// Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
// Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang"];
// Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
// Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao"];
// NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
//
// // 利用block进行排序
// NSArray *array2 = [array sortedArrayUsingComparator:
// ^NSComparisonResult(Student *obj1, Student *obj2) {
// // 先按照姓排序
// NSComparisonResult result = [obj1.lastname compare:obj2.lastname];
// // 如果有相同的姓,就比较名字
// if (result == NSOrderedSame) {
// result = [obj1.firstname compare:obj2.firstname];
// }
//
// return result;
// }];
//
// NSLog(@"array2:%@", array2); //#pragma mark 数组排序4-高级排序
// void arraySort4() {
// Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li" bookName:@"book1"];
// Student *stu2 = [Student studentWithFirstname:@"LongHu" lastname:@"Huang" bookName:@"book2"];
// Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li" bookName:@"book2"];
// Student *stu4 = [Student studentWithFirstname:@"Jian" lastname:@"Xiao" bookName:@"book1"];
// NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
//
// // 1.先按照书名进行排序
// // 这里的key写的是@property的名称
// NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];
// // 2.再按照姓进行排序
// NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];
// // 3.再按照名进行排序
// NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];
// // 按顺序添加排序描述器
// NSArray *descs = [NSArray arrayWithObjects:bookNameDesc, lastnameDesc, firstnameDesc, nil];
//
// NSArray *array2 = [array sortedArrayUsingDescriptors:descs];
//
// NSLog(@"array2:%@", array2);
// } }
return ;
}
 //
// main.m
// NSSet
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { /*
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类 2> 不同点
* NSArray有顺序,NSSet没有顺序
*/ // 1.
// NSSet *s = [NSSet set];
//
// NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
//
// // 随机拿出一个元素
// NSString *str = [s2 anyObject];
//
// NSLog(@"%@", str);
//
// //NSLog(@"%ld", s2.count); // 2.
// NSMutableSet *s = [NSMutableSet set];
//
// // 添加元素
// [s addObject:@"hack"];
// [s addObject:@"jack"];
//
//
// // 删除某个元素
// [s removeObject:@"jack"];
// // 删除所有元素
// // [s removeAllObjects ];
// NSLog(@"%@",s); }
return ;
}
 //
// main.m
// 04-计算代码行数
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// /*
* 考察NSString、NSArray的使用
* NSFileManager
*/ #import <Foundation/Foundation.h> // 计算文件的代码行数
/*
path : 文件的全路径(可能是文件夹、也可能是文件)
返回值 int :代码行数
*/
NSUInteger codeLineCount(NSString *path)
{
// 1.获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager]; // 2.标记是否为文件夹
BOOL dir = NO; // 标记是否为文件夹
// 标记这个路径是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; // 3.如果不存在,直接返回0
if(!exist)
{
NSLog(@"文件路径不存在!!!!!!");
return ;
} // 代码能来到着,说明路径存在 if (dir)
{ // 文件夹
// 获得当前文件夹path下面的所有内容(文件夹、文件)
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 定义一个变量保存path中所有文件的总行数
int count = ; // 遍历数组中的所有子文件(夹)名
for (NSString *filename in array)
{
// 获得子文件(夹)的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filename]; // 累加每个子路径的总行数
count += codeLineCount(fullPath);
} return count;
}
else
{ // 文件
// 1.判断文件的拓展名(忽略大小写)
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
// 文件拓展名不是h,而且也不是m,而且也不是c
return ;
} // 2.加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //3.将文件内容切割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];
NSLog(@"%@ - %ld", path, array.count);
return array.count; // //4. 删掉文件路径前面的/Users/Mac/desktop/oc
// NSRange range = [path rangeOfString:@"/Users/Mac/desktop/oc/"];
// NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
//
// // 打印文件路径和行数
// NSLog(@"%@ - %ld", str, array.count);
//
}
} int main()
{ NSUInteger count = codeLineCount(@"/Users/Mac/desktop/oc"); NSLog(@"%ld", count); return ;
} void test()
{
//练习 文本的代码行数
NSString *str = @"jack\nrose\njim\njake"; [str writeToFile:@"//Users/Mac/desktop/练习" atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSArray *array = [str componentsSeparatedByString:@"\n"]; for (NSString *line in array)
{
NSLog(@"%@", line);
} //int count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/0811/代码/04-block/04-block/main.m"); //NSLog(@"count=%d", count);
}
 //
// main.m
// NSDictionary
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { /*
集合
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i] 2.NSSet\NSMutableSet
* 无序 3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
*/ /*
字典: key ----> value
索引 ----> 文字内容 里面存储的东西都是键 值对 */
// 2. // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; // 3.
// NSArray *keys = @[@"name", @"address"];
// NSArray *objects = @[@"jack", @"北京"]; // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// id obj = [dict objectForKey:@"name"];
// NSLog(@"%@",obj); //打印名字 /* 4.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil]; */ // 5.简化的 记住
// NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
// id obj = dict[@"name"];//等价 id obj = [dict objectForKey:@"name"];
// NSLog(@"%@", obj); // // 6. 返回的是键值对的个数
// NSLog(@"%ld", dict.count); // NSMutableDictionary // NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//
// // 添加键值对
// [dict setObject:@"jack" forKey:@"name"];
//
//
// [dict setObject:@"北京" forKey:@"address"];
// //覆盖以前的name
// [dict setObject:@"rose" forKey:@"name"];
//
//
// // 移除键值对
// //[dict removeObjectForKey:@"name"];
//
//
// NSString *str = dict[@"name"];
//
//
// NSLog(@"%@", str);
//
// NSLog(@"%@", dict); //NSLog(@"%@", @[@"jack", @"rose"]); // 错误做法右边为不可变字典
// NSMutableDictionary *dict = @{@"name" : @"jack"};
//
// [dict setObject:@"rose" forKey:@"name"]; // 7. 遍历字典 //字典不允许有相同的key,但允许有相同的value(Object)
// 字典的无序的
//
// NSDictionary *dict = @{
// @"address" : @"北京",
// @"name" : @"jack",
// @"name2" : @"jack",
// @"name3" : @"jack",
// @"qq" : @"7657567765"};
////
//
// // 第一种
// NSArray *keys = [dict allKeys];
//
// for (int i = 0; i<dict.count; i++)
// {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
// NSLog(@"%@ = %@", key, object);
// }
//
//
// // 第二种block
// [dict enumerateKeysAndObjectsUsingBlock:
// ^(id key, id obj, BOOL *stop) {
// NSLog(@"%@ - %@", key, obj);
//
// // *stop = YES;
// }]; // 8. // NSArray *persons = @[
// @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
// @{@"name" : @"rose", @"qq" : @"767567"},
// @{@"name" : @"jim", @"qq" : @"423423"},
// @{@"name" : @"jake", @"qq" : @"123123213"}
// ];
//
// //
// // NSDictionary *jim = persons[2];
//
//
// //
// NSString *bookName = persons[0][@"books"][1];
// NSLog(@"%@", bookName);
// //NSArray *array = persons[0][@"books"];
//
// //NSLog(@"%@", array);
//
// // 先取出1位置对应的字典
// // 再取出字典中qq这个key对应的数据
// //NSLog(@"%@", persons[1][@"qq"]);
//
// // NSLog(@"%@", jim);
// // 快速视频 //#pragma mark 字典的初始化
// void dictCreate() {
// // NSDictionary是不可变的
// NSDictionary *dict = [NSDictionary dictionaryWithObject:@"v" forKey:@"k"];
//
// // 最常用的初始化方式
// dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
//
// NSArray *objects = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
// NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
// dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// NSLog(@"%@", dict);
// }
//
//#pragma mark 字典的基本用法
// void dictUse() {
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
//
// // count是计算有多少个键值对(key-value)
// NSLog(@"count=%zi", dict.count);
//
// // 由于NSDictionary是不可变的,所以只能取值,而不能修改值
// id obj = [dict objectForKey:@"k2"];
// NSLog(@"obj=%@", obj);
//
// // 将字典写入文件中
// NSString *path = @"/Users/apple/Desktop/dict.xml";
// [dict writeToFile:path atomically:YES];
//
// // 从文件中读取内容
// dict = [NSDictionary dictionaryWithContentsOfFile:path];
// NSLog(@"dict=%@", dict);
// }
//
//#pragma mark 字典的用法
// void dictUse2() {
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
// // 返回所有的key
// NSArray *keys = [dict allKeys];
// //NSLog(@"keys=%@", keys);
//
// NSArray *objects = [dict allValues];
// //NSLog(@"objects=%@", objects);
//
// // 根据多个key取出对应的多个value
// // 当key找不到对应的value时,用marker参数值代替
// objects = [dict objectsForKeys:[NSArray arrayWithObjects:@"k1", @"k2", @"k4", nil] notFoundMarker:@"not-found"];
// NSLog(@"objects=%@", objects);
// }
//
//#pragma mark 遍历字典
// void dictFor() {
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
// // 遍历字典的所有key
// for (id key in dict) {
// id value = [dict objectForKey:key];
// NSLog(@"%@=%@", key, value);
// }
// }
//
//#pragma mark 遍历字典2
// void dictFor2() {
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
// // key迭代器
// NSEnumerator *enumer = [dict keyEnumerator];
// id key = nil;
// while ( key = [enumer nextObject]) {
// id value = [dict objectForKey:key];
// NSLog(@"%@=%@", key, value);
// }
//
// // 对象迭代器
// // [dict objectEnumerator];
// }
//
//#pragma mark 遍历字典3
// void dictFor3() {
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"v1", @"k1",
// @"v2", @"k2",
// @"v3", @"k3", nil];
// [dict enumerateKeysAndObjectsUsingBlock:
// ^(id key, id obj, BOOL *stop) {
// NSLog(@"%@=%@", key, obj);
// }];
// }
//
//#pragma mark
// void dictMemory() {
// Student *stu1 = [Student studentWithName:@"stu1"];
// Student *stu2 = [Student studentWithName:@"stu2"];
// Student *stu3 = [Student studentWithName:@"stu3"];
//
// // 一个对象称为字典的key或者value时,会做一次retain操作,也就是计数器会+1
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// stu1, @"k1",
// stu2, @"k2",
// stu3, @"k3", nil];
//
// // 当字典被销毁时,里面的所有key和value都会做一次release操作,也就是计数器会-1
// } //#pragma mark 可变字典的使用
// void dictUse() {
// // 创建一个空的字典
// NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// Student *stu1 = [Student studentWithName:@"stu1"];
// Student *stu2= [Student studentWithName:@"stu2"];
//
// // 添加元素
// // stu1的计数器会+1
// [dict setObject:stu1 forKey:@"k1"];
// NSLog(@"stu1:%zi", [stu1 retainCount]);
//
// // 添加其他字典other到当前字典dict中
// NSDictionary *other = [NSDictionary dictionaryWithObject:@"v2" forKey:@"k2"];
// [dict addEntriesFromDictionary:other];
//
// // 删除所有的键值对
// // [dict removeAllObjects];
//
// // 删除k1对应的元素stu1,stu1会做一次release操作
// [dict removeObjectForKey:@"k1"];
// NSLog(@"stu1:%zi", [stu1 retainCount]);
//
// // 删除多个key对应的value
// // [dict removeObjectsForKeys:[NSArray arrayWithObject:@"k1"]];
//
// // 字典被销毁时,内部的所有key和value计数器都会-1,也就是说stu1会release一次
// }
// }
return ;
}
 //
// main.m
// NSNumber
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { // void test ()
// {
// NSNumber *num = [NSNumber numberWithInt:10];
//
// NSDictionary *dict = @{
// @"name" : @"jack",
//
//
// @"age" : num
//
// };
//
// NSNumber *num2 = dict[@"age"];
//
//
// int a = [num2 intValue];
//
// NSLog(@"%d" , a);
// }
// // 2.
// @20 将 20包装成一个NSNumber对像 // NSArray *array = @[
//
// @{@"name" : @"jack", @"age" : @20},
//
// @{@"name" : @"rose", @"age" : @25},
//
// @{@"name" : @"jim", @"age" : @27}
// ];
//
//
// // 将各种基本数据类型包装成NSNumber对象
// @10.5;
// @YES;
// @'A'; // NSNumber对象
//
// @"A"; // NSString对象
//
//
//
// // 将age变量包装成NSNumber对象
// int age = 100;
// @(age);
// //[NSNumber numberWithInt:age];
//
//
// NSNumber *n = [NSNumber numberWithDouble:10.5];
// int d = [n doubleValue];
//
//
//
// int a = 20;
// // @"20"
// NSString *str = [NSString stringWithFormat:@"%d", a];
// NSLog(@"%d", [str intValue]); }
return ;
}
 //
// main.m
// NSValue
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { // // NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
//
// // 结构体--->OC对象
// //结构体
// CGPoint p = CGPointMake(10, 10);
// // 将结构体转为Value对象
// NSValue *value = [NSValue valueWithPoint:p];
//
// // 将value转为对应的结构体
// // [value pointValue];
//
// NSArray *array = @[value ];
// }
return ;
}
 //
// main.m
// NSDate
//
// Created by Mac-ZhangXiaoMeng on 14/12/30.
// Copyright (c) 2014年 Mac-ZhangXiaoMeng. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool { // void use()
// {
// // 创建一个时间对象
// NSDate *date = [NSDate date];
// // 打印出的时候是0时区的时间(北京-东8区)
// NSLog(@"%@", date);
//
//
// 比date晚5秒钟
// NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date]; // // 从1970开始走过的秒数
// NSTimeInterval seconds = [date2 timeIntervalSince1970];
//
// // [date2 timeIntervalSinceNow];
// }
// // 2.记住
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // y 年 M 月 d 日
// m 分 s 秒 H (24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *str = [formatter stringFromDate:date]; NSLog(@"%@", str); // // 09/10/2011
// NSString *time = @"2011/09/10 18:56";
//
// NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// formatter.dateFormat = @"yyyy/MM/dd HH:mm";
//
// NSDate *date = [formatter dateFromString:time];
// NSLog(@"%@", date);
//
// }
return ;
}