黑马程序员——OC语言------Foundation
来源:互联网 发布:老虎机的内部算法 编辑:程序博客网 时间:2024/05/16 05:51
Foundation
一、结构体
1>范围:NSRange(location length)
//NSRange r1 = {2,4}; // 不用//NSRange r2 ={.location = 2, .length = 4};// 不用//NSRange r3 =NSMakeRange(2, 4); // 掌握NSString *str =@"i love oc";
// 查找某个字符串在str中的范围NSRange range = [strrangeOfString:@"love"];NSLog(@"loc =%ld, length=%ld", range.location, range.length);
2>点:NSPoint\CGPoint
CGPoint p1 =CGPointMake(20, 20);NSPoint p2 =NSMakePoint(10, 10);
或者:
CGPoint p1 =NSMakePoint(10, 10);NSPoint p2 =CGPointMake(20, 20);
// 比较两个点是否相同(x、y)
BOOL b =CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
3>尺寸:NSSize\CGSize
NSSize s1 =CGSizeMake(100, 50);NSSize s2 =NSMakeSize(100, 50);CGSize s3 =NSMakeSize(200, 60);
4>区域:NSRect\CGRect (CGPoint CGSize)
原理:
typedef struct_NSRect {
NSPointorigin;
NSSizesize;
} NSRect;
CGRect r1 =CGRectMake(0, 0, 100, 50); CGRect r2 = { {0,0}, {100, 90}}; CGRect r3 = {p1,s2};
// 使用CGPointZero等的前提是添加CoreGraphics框架CGRect r4 ={CGPointZero, CGSizeMake(100, 90)};
表示原点:CGPointZero
CGPointZero ==CGPointMake(0, 0)
//区域是否包含点BOOL b2 =CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));
二、NSString和NSMutableString
NSString:不可变字符串
NSMutableString:可变字符串
1.字符串的创建
NSString *s1 =@"jack"; NSString *s2 =[[NSString alloc] initWithString:@"jack"]; NSString *s3 =[[NSString alloc] initWithFormat:@"age is %d", 10];
2.C字符串 --> OC字符串
NSString *s4 =[[NSString alloc] initWithUTF8String:"jack"];
3.OC字符串 --> C字符串
const char *cs = [s4UTF8String];
4.拼接字符串
NSMutableString *s1= [NSMutableString stringWithFormat:@"my age is 10"]; // 拼接内容到s1的后面[s1appendString:@" 11 12"];NSString *s3 = [s2stringByAppendingString:@" 11 12"];<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
5.字符串的导出
void stringExport(){ // 字符串的导出 [@"Jack\nJack"writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YESencoding:NSUTF8StringEncoding error:nil]; NSString *str = @"4234234"; NSURL *url = [NSURLfileURLWithPath:@"/Users/apple/Desktop/my2.txt"]; [str writeToURL:url atomically:YESencoding:NSUTF8StringEncoding error:nil];}
三、集合类:NSArray和NSMutableArray
NSArray :不可变数组
NSMutableArray : 可变数组
使用细节:
1.NSArray的创建 NSArray *array2 = [NSArrayarrayWithObject:@"jack"]; // nil是数组元素结束的标记 NSArray *array3 = [NSArrayarrayWithObjects:@"jack", @"rose", nil]; //NSArray *array4 = [NSArrayarrayWithObjects:@"jack", @"rose", @"4324324",nil]; // 快速创建一个NSArray对象NSArray *array4 =@[@"jack", @"rose", @"4324324"];
注意:
1> @[] 只创建不可变数组NSArray。
2> OC数组不能存放nil值
3> OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
2.NSArray的元素个数 NSLog(@"%ld", array3.count);
3.NSArray中元素的访问 NSLog(@"%@", [array3objectAtIndex:1]); array3[1];NSLog(@"%@", array3[0]);
//遍历数组Person *p = [[Personalloc] init]; NSArray *array = @[p, @"rose",@"jack"];[arrayenumerateObjectsUsingBlock: // 每遍历到一个元素,就会调用一次block // 并且当前元素和索引位置当做参数传给block ^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%ld - %@", idx,obj); if (idx == 0) { // 停止遍历 *stop = YES; } }];
// 可变数组的基本使用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];
四、集合类:NSSet和NSMutableSet
NSSet和NSArray的对比
1> 共同点
都是集合,都能存放多个OC对象
只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
本身都不可变,都有一个可变的子类
2> 不同点
NSArray有顺序,NSSet没有顺序
// set的基本使用void test1(){ //创建一个不可变SetNSSet *s = [NSSet set]; //创建一个有元素的不可变Set NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil]; // 随机拿出一个元素 NSString *str= [s2 anyObject]; NSLog(@"%@",str); //打印元素个数 NSLog(@"%ld",s2.count);} void test2(){ //创建一个可变Set NSMutableSet *s= [NSMutableSet set]; // 添加元素 [s addObject:@"yang"]; // 删除元素 [s removeObject(id)];}
五、集合类:NSDictionary和NSMutableDictionary
NSDictionary:可变字典
NSMutableDictionary:不可变字典
1.特点:
1>无序
2>快速创建(不可变):@{key1 : value1, key2 : value2}
3>快速访问元素:字典名[key]
key ----> value
索引 ----> 文字内容
里面存储的东西都是键值对
2.使用细节:
// 创建不可变字典 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"]; // 删除元素 [mdremoveObjectForKey:@"name"]; NSLog(@"%@", md); // 遍历 NSArray *ka = [md allKeys]; for (int i = 0; i < md.count;i++) { NSLog(@"%@:%@",ka[i], md[ka[i]]); } // 遍历 [mdenumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@=%@",key, obj); }];
六、NSNumber
数字类,将数字包装成oc对象
// 数字转NSNumberNSNumber*num = [NSNumbernumberWithInt:11];//NSNumber转数字int i=[num intVaule];@20; // 快速创建NSNumber对象,编译器特性@10.1;@YES;@’a’;int age= 20;@(age);
七、NSValue
NSVaule:能将任何数据类型都能包装成oc对象
// 将结构体CGPoint包装成NSVaule对象NSVaule*v = [NSVaulevauleWithPoint:CGPointMake(1, 1)];// 从NSVaule对象获取CGPoint的值[v pointVaule];
八、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);
九、计算代码行数
//// main.m// 计算文件行数#import <Foundation/Foundation.h> NSUInteger linesFromFile(NSString *path){ // 获取文件管理者(单列对象) NSFileManager *fm =[NSFileManager defaultManager]; // 是否是目录标志符 BOOL isDir = NO; // 判断路径是否存在 BOOL isEx = [fmfileExistsAtPath:path isDirectory:&isDir]; // 路径不存在 if (!isEx) { NSLog(@"the file ofpath:%@ is no exist!", path); return 0; } // 是目录 if (isDir) { NSUInteger count = 0; // 获取目录中的内容:即文件和子目录 NSArray *nameArray = [fmcontentsOfDirectoryAtPath:path error:nil]; // 遍历 for (NSString *name innameArray) { // 拼接全路径 NSString *fileName =[NSString stringWithFormat:@"%@/%@", path, name]; // 递归计算行数 count +=linesFromFile(fileName); } return count; } else { // 获取文件扩展名(忽略大小写) NSString *extension = [[pathpathExtension] lowercaseString]; // 对文件进行过滤 if (![extensionisEqualToString:@"h"] && ![extensionisEqualToString:@"c"] && ![extensionisEqualToString:@"m"]) { return 0; } // 读取文件内容 NSString *fileContents =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil]; // 通过换行符分割 NSArray *fileLines =[fileContents componentsSeparatedByString:@"\n"]; // 去掉文件的公共路径 NSRange range = [pathrangeOfString:@"/Users/zhouxf/Documents/code/"]; NSString *file = [pathstringByReplacingCharactersInRange:range withString:@""]; // 打印文件路径和行数 NSLog(@"%@:%ld",file, fileLines.count); // 返回行数 return fileLines.count; }} int main(int argc, const char * argv[]){ NSString *path =@"/Users/zhouxf/Documents/code"; NSUInteger count = linesFromFile(path); NSLog(@"lines count =%ld", count); return 0;}
- 黑马程序员——OC语言------Foundation
- 黑马程序员—OC语言基础—Foundation框架小结
- 黑马程序员——OC语言加强---Foundation框架介绍
- 黑马程序员 -- OC语言 Foundation
- 黑马程序员——OC---Foundation
- 黑马程序员——OC中的Foundation
- 黑马程序员 —OC(Foundation)
- 黑马程序员 —OC(Foundation补充)
- 【黑马程序员】OC-Foundation框架—NSMutableString
- 黑马程序员---【OC语言】08Foundation框架
- 黑马程序员-OC语言Foundation框架
- 黑马程序员IOS-OC语言-Foundation-类
- 黑马程序员-OC语言-Foundation-NSArray
- 黑马程序员---oc Foundation
- 黑马程序员——11、OC语言(Foundation框架的简单使用)
- 黑马程序员——OC基础05—Foundation框架
- 黑马程序员——OC中Foundation框架
- 黑马程序员——OC中Foundation框架
- 【斜率优化dp】HDU3669 Cross the Wall
- 分割流、合并流
- 循序渐进理解javascript闭包
- bitmap图片压缩
- svn教程
- 黑马程序员——OC语言------Foundation
- 感想
- selenium webdriver定位不到元素的五种原因及解决办法
- (原创)Centos6.4上用gitolite部署git服务器
- 黑马程序员——JAVA基础---网路编程---概述,UDP/TCP对应Socket,小知识点
- chrome console
- &和&&的使用区别
- Android Activity中onSaveInstanceState和onRestoreInstanceState的使用
- 几种拼接字符串的效率问题 .