-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------
包含Foundation头文件
#import <Foundation/Foundation.h>
结构体
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
//
// main.m
// Foundation中的结构体
//
// Created by zhouxf on 14-4-17.
// Copyright (c) 2014年 zhouxf. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * 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 char *cs = [s4 UTF8String];
// 从文件中读取内容
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/zhouxf/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/zhouxf/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:可变数组
l 有序;
l 快速创建(不可变):@[obj1,obj2, obj3]
l 快速访问元素:数组名[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];
// 快速创建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, BOOL *stop) {
NSLog(@"%ld:%@", idx, obj);
if (idx == 1) {
*stop = YES;
}
}];
// 创建可变数组
NSMutableArray *ma = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 增加元素
[ma addObject:@"jack"];
[ma addObject:@"jack1"];
[ma addObject:@"jack2"];
// 删除指定对象的元素
[ma removeObject:@"jim"];
// 删除指定位置的元素
[ma removeObjectAtIndex:0];
// 删除最后元素
[ma removeLastObject];
// 删除所有元素
[ma removeAllObjects];
NSSet:不可变set
NSMutableSet:可变set合
l 无序
与NSArray比较:
1. 共同点
都是集合,都能存放多个oc对象
只能存放oc对象,不能存放非oc对象(int、char、float等,结构体,枚举)
本身不可变,都有一个可变的子类
2. 不同点
NSArray有序,NSSet无序
/*
NSSet:不可变set
NSMutableSet:可变字set
*/
// 创建不可变set
NSSet *set1 = [NSSet setWithObjects:@"jack", @"rose", nil];
// 随机访问一个元素
NSString *str = [set1 anyObject];
// 创建可变set
NSMutableSet *mset = [NSMutableSet set];
// 增加元素
[mset addObject:@"jack"];
[mset addObject:@"jack1"];
// 删除元素
[mset removeObject:@"jack"];
NSDictionary:不可变字典
NSMutableDictionary:可变字典
l 无序
l 快速创建(不可变):@{key1:obj1,key2:obj2, key3:obj3}
l 快速访问元素:字典名[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, BOOL *stop) {
NSLog(@"%@=%@", key, obj);
}];
NSNumber:数字类,将数字包装成oc对象
// 数字转NSNumber
NSNumber *num = [NSNumbernumberWithInt:11];
// NSNumber转数字
int i =[num intVaule];
@20; // 快速创建NSNumber对象,编译器特性
@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);
练习:计算代码行数
//
// main.m
// 计算文件行数
//
// Created by zhouxf on 14-4-9.
// Copyright (c) 2014年 zhouxf. All rights reserved.
//
#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/zhouxf/Documents/code/"];
NSString *file = [path stringByReplacingCharactersInRange: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;
}
-------------------------------------- android培训、java培训、ios培训期待与您交流! ---------------------------------