Foundation框架的小总结
一、Foundation框架—结构体
一、基本知识
Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础。
如果要想使用foundation框架中的数据类型,那么包含它的主头文件就可以了。即#import<foundation/foundation.h>
补充:core foundation框架相对底层,里面的代码几乎都是c语言的,而foundation中是OC的。
二、常用的结构体介绍及简单使用
常用的结构体:
(一)NSRang的基本使用
NSRange(location length) 表示范围
NSPoint\CGPoint 表示坐标
NSSize\CGSize 表示UI元素的尺寸
NSRect\CGRect (CGPint CGSize) 表示一个UI元素的位置和尺寸
创建变量
//
// main.m
// Foundation1-结构体
//
// Created by mj on 13-4-5.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> void test() {
// 定义了Date这种结构体类型
struct Date {
int year;
int month;
int day;
}; // 定义结构体变量
struct Date d = {, , };
d.day = ;
} void test1() {
typedef struct Date {
int year;
int month;
int day;
} MyDate; MyDate d = {, , };
} void range() {
NSRange range = NSMakeRange(, ); NSLog(@"location:%zi", range.location);
NSLog(@"length:%zi", range.length); NSString *str = NSStringFromRange(range);
NSLog(@"%@", str);
// NSLog(@"%@", range); 错误的做法,%@代表着OC对象
} void point() {
// NSPoint p;
CGPoint p;
p.x = ;
p.y = ; p = NSMakePoint(, ); // 常见的方式
p = CGPointMake(, ); NSString *str = NSStringFromPoint(p);
NSLog(@"%@", str);
} void size() {
CGSize size; // NSSize size;
size.width = ;
size.height = ; size = NSMakeSize(, ); size = CGSizeMake(, ); NSString *str = NSStringFromSize(size);
NSLog(@"%@", str);
} void rect() {
NSRect rect; // CGRect rect;
rect.origin.x = ;
rect.origin.y = ; rect.size.width = ;
rect.size.height = ; rect = NSMakeRect(, , , ); rect = CGRectMake(, , , ); NSString *str = NSStringFromRect(rect);
NSLog(@"%@", str);
} int main(int argc, const char * argv[])
{
@autoreleasepool {
rect();
}
return ;
}
二、Foundation框架—字符串
一、Foundation框架中一些常用的类
字符串型:
NSString:不可变字符串
NSMutableString:可变字符串
集合型:
1)
NSArray:OC不可变数组
NSMutableArray:可变数组
2)
NSSet:
NSMutableSet:
3)
NSDictiorary
NSMutableDictiorary
其它:
NSDate
NSObject
二、NSString和NSMutableString
种创建字符串的形式
#import <Foundation/Foundation.h> #pragma mark NSString的创建
void stringCreate() {
// char *s = "A String!"; // C语言中的字符串 // 这种方式创建出来的字符串是不需要释放的
NSString *str1 = @"A String!"; NSString *str2 = [[NSString alloc] init];
str2 = @"A String!";
[str2 release]; NSString *str3 = [[NSString alloc] initWithString:@"A String!"];
[str3 release];
// 不需要管理内存
str3 = [NSString stringWithString:@"A String!"]; NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"];
[str4 release];
str4 = [NSString stringWithUTF8String:"A String!"]; NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", , 1.55f]; // 这句代码放在中间会造成2个错误:
// 1.前面创建的字符串没有被释放
// 2.后面创建的字符串会释放过度,造成野指针错误
// str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; NSLog(@"str5:%@", str5);
[str5 release]; str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", , 1.55f];
} void test(NSString **str) {
*str = @"";
// s = @"123";
} void stringCreate2() {
// 从文件中读取文本
NSString *path = @"/Users/apple/Desktop/test.txt";
// 这个方法已经过期,不能解析中文
// NSString *str1 = [NSString stringWithContentsOfFile:path]; // 定义一个NSError变量
NSError *error;
// 指定字符串编码为UTF-8: NSUTF8StringEncoding
NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) { // 没有错误信息
NSLog(@"读取文件成功:%@", str1);
} else {
NSLog(@"读取文件失败:%@", error);
} NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"];
NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str2); NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str3);
} #pragma mark 字符串的导出
void stringExport() {
NSString *str = @"123456我是字符串!!!!";
// 如果文件不存在,会自动创建文件
// 如果文件夹不存在,会直接报错
NSString *path = @"/Users/apple/Desktop/abc.txt"; NSError *error;
// 编码指定错误也会报错
// YES代表要进行原子性操作,也就是会创建一个中间的临时文件
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
// [error localizedDescription]会返回主要的错误信息
NSLog(@"写入失败:%@", [error localizedDescription]);
} else {
NSLog(@"写入成功");
}
} //void test2(int *p) {
// *p = 9;// a = 9;
//} int main(int argc, const char * argv[])
{ @autoreleasepool {
// int a = 10;
// test2(&a);
// NSLog(@"%i", a); stringExport(); // NSString *s = @"456";
//
// test(&s);
//
// NSLog(@"%@", s);
}
return ;
}
//
// main.m
// NSString
//
// Created by mj on 13-4-5.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> #pragma mark NSString的创建
void stringCreate() {
// char *s = "A String!"; // C语言中的字符串 // 这种方式创建出来的字符串是不需要释放的
NSString *str1 = @"A String!"; NSString *str2 = [[NSString alloc] init];
str2 = @"A String!";
[str2 release]; NSString *str3 = [[NSString alloc] initWithString:@"A String!"];
[str3 release];
// 不需要管理内存
str3 = [NSString stringWithString:@"A String!"]; NSString *str4 = [[NSString alloc] initWithUTF8String:"A String!"];
[str4 release];
str4 = [NSString stringWithUTF8String:"A String!"]; NSString *str5 = [[NSString alloc] initWithFormat:@"My age is %i and height is %.2f", , 1.55f]; // 这句代码放在中间会造成2个错误:
// 1.前面创建的字符串没有被释放
// 2.后面创建的字符串会释放过度,造成野指针错误
// str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", 19, 1.55f]; NSLog(@"str5:%@", str5);
[str5 release]; str5 = [NSString stringWithFormat:@"My age is %i and height is %.2f", , 1.55f];
} void test(NSString **str) {
*str = @"";
// s = @"123";
} void stringCreate2() {
// 从文件中读取文本
NSString *path = @"/Users/apple/Desktop/test.txt";
// 这个方法已经过期,不能解析中文
// NSString *str1 = [NSString stringWithContentsOfFile:path]; // 定义一个NSError变量
NSError *error;
// 指定字符串编码为UTF-8: NSUTF8StringEncoding
NSString *str1 = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) { // 没有错误信息
NSLog(@"读取文件成功:%@", str1);
} else {
NSLog(@"读取文件失败:%@", error);
} NSURL *url = [NSURL URLWithString:@"file:///Users/apple/Desktop/test.txt"];
NSString *str2 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str2); NSURL *url2 = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *str3 = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", str3);
} #pragma mark 字符串的导出
void stringExport() {
NSString *str = @"123456我是字符串!!!!";
// 如果文件不存在,会自动创建文件
// 如果文件夹不存在,会直接报错
NSString *path = @"/Users/apple/Desktop/abc.txt"; NSError *error;
// 编码指定错误也会报错
// YES代表要进行原子性操作,也就是会创建一个中间的临时文件
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
// [error localizedDescription]会返回主要的错误信息
NSLog(@"写入失败:%@", [error localizedDescription]);
} else {
NSLog(@"写入成功");
}
} //void test2(int *p) {
// *p = 9;// a = 9;
//} int main(int argc, const char * argv[])
{ @autoreleasepool {
// int a = 10;
// test2(&a);
// NSLog(@"%i", a); stringExport(); // NSString *s = @"456";
//
// test(&s);
//
// NSLog(@"%@", s);
}
return ;
}
(四)URL补充内容
Url:资源路径
格式:协议头:/路径
网络路径协议头:http
本地文件以file为协议头
ftp为协议头,说明资源是ftp服务器上的。
三、Foundation框架—集合
1、NSArray和NSMutableArray
(一)NSArray不可变数组
(1)NSArray的基本介绍
NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。
C语言数组有一个缺点即数组中只能存放同种数据类型的元素。
OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等。
(二)NSMutableArray可变数组
(1)NSMutableArray的基本使用
注意:NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法。
#import <Foundation/Foundation.h>
#import "Person.h" /* NSArray :不可变数组 NSMutableArray : 可变数组
*/ int main()
{
// @[] 只创建不可变数组NSArray
/* 错误写法
NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@"jim"];
*/ //NSArray *array = @[@"jack", @"rose"]; return ;
} // 可变数组的基本使用
void use3()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 添加元素
[array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; // 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:]; // 错误写法
// [array addObject:nil]; NSLog(@"%@", array); NSLog(@"%ld", array.count);
} // 遍历数组
void use2()
{
Person *p = [[Person alloc] init]; NSArray *array = @[p, @"rose", @"jack"]; // for (int i = 0; i<array.count; i++)
// {
// NSLog(@"%@", 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==1)
// {
// break;
// }
// } [array enumerateObjectsUsingBlock: // 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj); if (idx == )
{
// 停止遍历
*stop = YES;
} }]; // void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
// {
// NSLog(@"%ld - %@", idx, obj);
//
//
// if (idx == 0)
// {
// // 停止遍历
// *stop = YES;
// }
// };
//
// for (int i = 0; i<array.count; i++)
// {
// // 用来标记是否需要停止遍历
// BOOL isStop = NO;
//
// // 取出元素
// id obj = array[i];
//
// myblock(obj, i, &isStop);
//
//
// if (isStop)
// {
// break;
// }
// } } void use()
{
/*
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]; /*
1.NSArray的创建
*/
NSArray *array2 = [NSArray arrayWithObject:@"jack"]; // nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count]; //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil]; // 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @""]; /*
2.NSArray的元素个数
*/
NSLog(@"%ld", array3.count); /*
3.NSArray中元素的访问
*/
NSLog(@"%@", [array3 objectAtIndex:]); //array3[1];
NSLog(@"%@", array3[]);
}
2、NSSet和NSMutableSet
1.NSSet不可变集合
2.NSMutableSet可变集合
//
// main.m
// 05-NSSet
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// /*
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类 2> 不同点
* NSArray有顺序,NSSet没有顺序
*/ #import <Foundation/Foundation.h> int main()
{
NSMutableSet *s = [NSMutableSet set]; // 添加元素
[s addObject:@"hack"]; // 删除元素
// [s removeObject:<#(id)#>];
return ;
} // set的基本使用
void test()
{
NSSet *s = [NSSet set]; NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil]; // 随机拿出一个元素
NSString *str = [s2 anyObject]; NSLog(@"%@", str); //NSLog(@"%ld", s2.count);
}
练习
//
// 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
{ // 文件
// 判断文件的拓展名(忽略大小写)
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
// 文件拓展名不是h,而且也不是m,而且也不是c
return ;
} // 加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 将文件内容切割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n"]; // 删掉文件路径前面的/Users/apple/Desktop/iOS课堂共享/0722课堂共享/
NSRange range = [path rangeOfString:@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享/"];
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 打印文件路径和行数
NSLog(@"%@ - %ld", str, array.count); return array.count;
}
} int main()
{ NSUInteger count = codeLineCount(@"/Users/apple/Desktop/iOS课堂共享/0722课堂共享"); NSLog(@"%ld", count);
return ;
} void test()
{
NSString *str = @"jack\nrose\njim\njake"; [str writeToFile:@"/Users/apple/Desktop/abc.txt" 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);
}
3、NSDictionary和NSMutableDictionary
(一)NSDictionary不可变字典
(1)介绍
现实中的字典:根据索引找到具体的内容
OC中的NSDictionary:根据key找到value。里面存储的东西都是键值对。
注意:快速创建字典是编译器特性。
(二)NSMutableDictionary可变字典
//
// main.m
// 06-NSDictionary
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// /*
集合
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i] 2.NSSet\NSMutableSet
* 无序 3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
*/ #import <Foundation/Foundation.h> int main()
{
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @""},
@{@"name" : @"jim", @"qq" : @""},
@{@"name" : @"jake", @"qq" : @""}
]; //
// NSDictionary *jim = persons[2]; //
NSString *bookName = persons[][@"books"][];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"]; //NSLog(@"%@", array); // 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]); // NSLog(@"%@", jim);
return ;
} void use4()
{
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典的无序的
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @""}; // NSArray *keys = [dict allKeys];
//
// for (int i = 0; i<dict.count; i++)
// {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
//
// NSLog(@"%@ = %@", key, object);
// } [dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj); // *stop = YES;
}];
} void use3()
{
NSMutableDictionary *dict = @{@"name" : @"jack"}; [dict setObject:@"rose" forKey:@"name"];
} void use2()
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; // 添加键值对
[dict setObject:@"jack" forKey:@"name"]; [dict setObject:@"北京" forKey:@"address"]; [dict setObject:@"rose" forKey:@"name"]; // 移除键值对
// [dict removeObjectForKey:<#(id)#>]; NSString *str = dict[@"name"]; //NSLog(@"%@", str); NSLog(@"%@", dict); //NSLog(@"%@", @[@"jack", @"rose"]);
} void use()
{
/*
字典: key ----> value
索引 ----> 文字内容 里面存储的东西都是键值对 */ // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"]; // NSArray *keys = @[@"name", @"address"];
// NSArray *objects = @[@"jack", @"北京"]; // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; /*
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil];*/ NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"}; // id obj = [dict objectForKey:@"name"]; id obj = dict[@"name"]; NSLog(@"%@", obj); // 返回的是键值对的个数
NSLog(@"%ld", dict.count);
}
//
// main.m
// Foundation9-NSDictionary
//
// Created by mj on 13-4-7.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Student.h" #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
} int main(int argc, const char * argv[])
{
@autoreleasepool {
dictMemory();
}
return ;
}
4、NSNumber
//
// main.m
// Foundation11-NSNumber
//
// Created by mj on 13-4-7.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> void number() {
// 将int类型的10 包装成 一个NSNumber对象
NSNumber *number = [NSNumber numberWithInt:];
NSLog(@"number=%@", number); NSMutableArray *array = [NSMutableArray array];
// 添加数值到数组中
[array addObject:number]; // 取出来还是一个NSNumber对象,不支持自动解包(也就是不会自动转化为int类型)
NSNumber *number1 = [array lastObject];
// 将NSNumber转化成int类型
int num = [number1 intValue];
NSLog(@"num=%i", num);
} int main(int argc, const char * argv[])
{
@autoreleasepool {
number();
}
return ;
}
//
// main.m
// 07-NSNumber
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> int main()
{
// @20 将 20包装成一个NSNumber对像 NSArray *array = @[ @{@"name" : @"jack", @"age" : @}, @{@"name" : @"rose", @"age" : @}, @{@"name" : @"jim", @"age" : @}
]; // 将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A'; // NSNumber对象 @"A"; // NSString对象 // 将age变量包装成NSNumber对象
int age = ;
@(age);
//[NSNumber numberWithInt:age]; NSNumber *n = [NSNumber numberWithDouble:10.5]; int d = [n doubleValue]; int a = ; // @"20"
NSString *str = [NSString stringWithFormat:@"%d", a];
NSLog(@"%d", [str intValue]); return ;
} void test()
{
NSNumber *num = [NSNumber numberWithInt:]; NSDictionary *dict = @{
@"name" : @"jack", @"age" : num }; NSNumber *num2 = dict[@"age"]; int a = [num2 intValue]; NSLog(@"%d" , a);
}
5、NSDate
//
// main.m
// Foundation14-NSDate
//
// Created by mj on 13-4-7.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> #pragma mark 日期创建
void dateCreate() {
// date方法返回的就是当前时间(now)
NSDate *date = [NSDate date]; // now: 11:12:40
// date: 11:12:50
date = [NSDate dateWithTimeIntervalSinceNow:]; // 从1970-1-1 00:00:00开始
date = [NSDate dateWithTimeIntervalSince1970:]; // 随机返回一个比较遥远的未来时间
date = [NSDate distantFuture]; // 随机返回一个比较遥远的过去时间
date = [NSDate distantPast];
NSLog(@"%@", date);
} void dateUse() {
NSDate *date = [NSDate date];
// 返回1970-1-1开始走过的毫秒数
NSTimeInterval interval = [date timeIntervalSince1970]; // 跟其他时间进行对比
// [date timeIntervalSinceDate:<#(NSDate *)#>];
NSDate *date2 = [NSDate date];
// 返回比较早的那个时间
[date earlierDate:date2];
// 返回比较晚的那个时间
[date laterDate:date2];
} void dateFormat() {
NSDate *date = [NSDate date]; // 2013-04-07 11:14:45
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// HH是24进制,hh是12进制
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"] autorelease]; NSString *string = [formatter stringFromDate:date];
NSLog(@"%@", string); // 返回的格林治时间
NSDate *date2 = [formatter dateFromString:@"2010-09-09 13:14:56"]; NSLog(@"%@", date2); [formatter release];
} int main(int argc, const char * argv[])
{ @autoreleasepool {
dateFormat();
}
return ;
}
//
// main.m
// 08-NSDate
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> int main()
{
// 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 ;
} void date2string()
{
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);
} void use()
{
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date); NSDate *date2 = [NSDate dateWithTimeInterval: sinceDate:date]; // 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970]; // [date2 timeIntervalSinceNow];
}
6、NSValue
//
// main.m
// 08-NSValue
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
// #import <Foundation/Foundation.h> // NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue int main()
{ // 结构体--->OC对象 CGPoint p = CGPointMake(, );
// 将结构体转为Value对象
NSValue *value = [NSValue valueWithPoint:p]; // 将value转为对应的结构体
// [value pointValue]; NSArray *array = @[value ]; // insert code here...
// NSLog(@"这是哥修改过的东西6");
return ;
}
Foundation框架的小总结的更多相关文章
- Xcode:Foundation框架找不到,或者是自动提示出现问题
问题描述:Foundation框架找不到,或者是自动提示出现问题 之前的操作:手贱,不少心把编译器里面的源码改了 处理办法:清理缓存 缓存位置:点击桌面后,选择系统菜单栏:前往—电脑—硬盘—用户—ap ...
- Foundation框架 - 快速创建跨平台的网站页面原型
API参考:http://foundation.zurb.com/docs/ 作为网页设计和开发人员,我们面临着以下几个严峻的问题: 每天,人们用来上网的设备种类和数量都在不断上升. 为每种设备设计开 ...
- object -c OOP , 源码组织 ,Foundation 框架 详解1
object -c OOP , 源码组织 ,Foundation 框架 详解1 1.1 So what is OOP? OOP is a way of constructing softwar ...
- JavaWeb_(Struts2框架)Ognl小案例查询帖子
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver
========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...
- iOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底 ...
- Foundation框架-NSString和NSMutableString
可变与不可变的字符串 --1-- Foundation框架介绍 1.1 框架介绍 --2-- NSString 2.1 NSString介绍及使用 2.2 NSString创建方式 2.3 从文件中 ...
- Core Foundation框架
转载自:http://blog.csdn.net/weiwangchao_/article/details/7744972 Core Foundation框架 (CoreFoundation.fram ...
- 08OC之Foundation框架
1.Foundation框架简述 在前面,我们创建一个类的时候,都会选择Cocoa Class.到底Cocoa Class是什么东西呢? Cocoa 不是一门编程语言,因为它可以运行在多种编程语言上, ...
随机推荐
- 基于HTML5的WebGL实现json和echarts图表展现在同一个界面
突然有个想法,如果能把一些用到不同的知识点放到同一个界面上,并且放到一个盒子里,这样我如果要看什么东西就可以很直接显示出来,而且这个盒子一定要能打开.我用HT实现了我的想法,代码一百多行,这么少的代码 ...
- java的windows自动化-自动运行java程序
那么在一些工具齐全并且已经有了一定的写好的java程序的情况下(环境变量和软件见上一章http://www.cnblogs.com/xuezhezlr/p/7718273.html),如何自动化运行j ...
- 【ASP.NET MVC 学习笔记】- 03 Razor语法
本文参考:http://www.cnblogs.com/willick/p/3224144.html 1.Razor语句以@开头. 2.每个View都有自己的Model属性,可通过@Model调用.语 ...
- MongoDB复制
1. 什么是复制 (1)MongoDB复制是将数据同步在多个服务器的过程. (2)复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. (3)复制还允 ...
- Mybatis通用Mapper
极其方便的使用Mybatis单表的增删改查 项目地址:http://git.oschina.net/free/Mapper 优点? 不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表 ...
- winfrom窗体加载控制台程序,可以自定义输出语句颜色
winfrom窗体加载控制台程序,可以自定方输出语句颜色,如下图所示 怎么实现的此功能,网上有大把的方法,我这里已经把方法打包成了一个类,只需要引用调用就可以使用了,写的比较粗糙,如有发现需要改进的地 ...
- 爱上朴实的CSS细节
英文原文:Learning to Love the Boring Bits of CSS 未来的CSS太让人兴奋了:一方面,是全新的页面布局方式:另一方面,是酷炫的滤镜.颜色等视觉效果.这些CSS, ...
- MQTT——连接报文
学习MQTT协议.如果只是看了相关文档就认为可以了.那是一个错误的观念.笔者为了能更好的去理解MQTT协议.看了不少相关的开源Broker的项目.可惜这些项目一般都是不完全的.不过从这些项目中笔者至少 ...
- net start mongodb 服务名无效解决方案
net start mongodb 服务名无效 或者 net start mongodb 发生错误5,拒绝访问.是因为没有用管理员权限运行cmd. 解决方案:在window中,在搜索框输入cmd后,在 ...
- 如何阻止sql注入(pdo篇)
Use prepared statements and parameterized queries. These are SQL statements that are sent to and par ...