OC(Foundation框架部分知识总结)

原创 2015年11月18日 10:11:51
NSString(不可变字符串)

字符串创建(initWithFormat)

NSString *str1 = @"Something string..";

NSString *str3 = [[NSString alloc]initWithFormat:@"age is %d",10];

OC字符串和C字符串之间的转换


// C字符串 -》 OC字符串
NSString *str4 = [[NSString alloc] initWithUTF8String:"jack"];

// OC字符串 -》 C字符串
const char *str5= [str4 UTF8String];

从文件或URL创建字符串


//URL:资源路径
//协议头://路径
//file://
//ftp://
//http://weibo.com/a.jpg
//推荐用URL
//也可以抓取网页的内容,比如www.baidu.com首页
//创建一个URL,只要是URL就必须指定好协议头
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/guankunluo/Desktop/1.txt"];

 //从文件读取,并创建字符串str6
NSString *s = @"/Users/guankunluo/Desktop/1.txt";
NSString *str6 = [[NSString alloc]initWithContentsOfFile:s encoding:NSUTF8StringEncoding error:nil];

//将字符串转换为file协议的地址
NSURL *url2 = [NSURL fileURLWithPath:@"/Users/guankunluo/Desktop/1.txt"];
//从URL读取内容,并创建新的字符串str7
NSString *str7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

把字符串写入到文件(- writeToFile、 - writeToURL)


//把字符串写入到文件
NSString *path = @"/Users/guankunluo/Desktop/2.txt";
//加入\n来代表换行
[@"Jack \n Jack" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];

//把字符串写入到URL
NSURL *url = [NSURL URLWithString:@"file:///Users/guankunluo/Desktop/2.txt"];
[@"lalalalala" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSMutableString(可变字符串)

创建一个可变的字符串


//创建一个NSMutableString,可变
NSMutableString *str1 =[NSMutableString stringWithFormat:@"age is %d",10];

拼接字符串


//拼接内容到str1的结尾处,无返回值
[str1 appendString:@" 11 12"];

删除字符串


//根据范围把字符串中is删除,但是str1的字符串改变,范围也就改变了,所以不好
//[str1 deleteCharactersInRange:NSMakeRange(4,2)];

//应该根据rangeOfString方法先找出is的范围
NSRange range = [str1 rangeOfString:@"is"];

//然后在把取得的范围传入删除字符串方法的参数中,这样以后再改变也会随之改变范围
[str1 deleteCharactersInRange:range];

NSArray(有序不可变集合)

集合只能存放OC对象,不能存放基本类型

创建NSArray


//集合只能存放OC对象,不能存放基本类型
//创建只有1个集合,并设置一个元素
NSArray *array01 = [NSArray arrayWithObject:@"abc"];

//nil时集合元素的结束标记,不能删除
//集合中也不能定义nil元素
//NSArray *array02 = [NSArray arrayWithObjects:@"abc",@"def", nil];     //不推荐
NSArray *array02 = @[@"abc",@"def"];    //推荐   

获取NSArray的长度


//[array02 count];

//array02.count 返回的是unsigned long
NSLog(@"%ld",array02.count);

访问集合


NSLog(@"%@",[array02 objectAtIndex:1]); //不推荐
NSLog(@"%@",array02[1]);    //推荐

NSMutableArray(有序可变集合)

创建可变集合


//创建一个可变的空集合
NSMutableArray *array = [NSMutableArray array];   

//初始化可变集合时,添加元素
NSMutableArray *array2 = [NSMutableArray arrayWithObjects: @"sss", @"aaa", @"bbb", nil];

//错误,@[]返回的时NSArray,所以不能用@[]创建可变集合NSMutableArray
//NSMutableArray *array3 = @[@"dd",@"dsd",@"dsd"];

添加元素


//给可变集合添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];

删除元素


//删除所有元素
[array2 removeAllObjects];

//删除指定元素
[array2 removeObject:@"aaa"];

//删除指定索引的元素
[array2 removeObjectAtIndex:1];

//删除最后一个元素
[array2 removeLastObject];

NSSet和NSMutableSet(无序不可变集合和可变集合)

NSSet 和 NSArray的对比
共同点:
1.都是集合,都能存放多个OC对象
2.只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、float等、结构体、枚举)
3.都有一个可变的子类,本身不可变

不同点:
1.NSArray有顺序,NSSet无顺序

NSSet


//错误,没有意义,创建了一个空的set集合,而且Set是不可变的
//NSSet *s = [NSSet set];

NSSet *s = [NSSet setWithObjects: @"aaa", @"bbb", @"ccc", @"ddd", nil];

//由于NSSet是无序的,所以只能随机取出元素
//随机取出元素
NSString *str = [s anyObject];

NSMutableSet


NSMutableSet  *s = [NSMutableSet set];

//添加元素
[s addObject:@"hack"];
[s addObject:@"haha"];

//删除所有元素
[s removeAllObjects];

//删除指定元素
[s removeObject:@"haha"];

NSDictionary和NSMutableDictionary(可变和不可变的字典集合)

字典:相当于java中的map
字典是无序的
key—-》value
索引—-》文字内容
Dictionary中存储的是键值对
Dictionary中的key不能重复,value可以重复

NSDictionary(不可变字典集合)


//NSDictionary---不可变的字典、无序的
//创建了一个字典,但是只存储了一个键值对
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"luoguankun" forKey:@"name"];

//通过key获取value
NSString *name =  [dict objectForKey:@"name"];
NSLog(@"%@",name);  //luoguankun
//推荐这样访问字典中的value
id obj = dict[@"name"];

//通过传入2个不可变数组NSArray来初始化Dictionary字典集合
NSArray *key = @[@"name",@"address"];
NSArray *value = @[@"罗冠坤",@"北京"];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:value forKeys:key];
//如果传入的key没有找到,就返回null,不报错
NSLog(@"%@",[dict2 objectForKey:@"address"]); //北京

//下面的写法可读性很差
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"luoguankun",@"name",
                       @"北京",@"address",nil];

//推荐使用这种方式初始化创建字典
NSDictionary *dict4 = @{@"name": @"luoguankun",@"address": @"北京"};

//返回键值对的个数,不是key+value的个数
int count = dict4.count;

NSMutableDictionary(可变字典集合)

//错误!@{}返回不可变的Dictionary
//NSMutableDictionary *dict = @{@"name",@"luoguankun"};

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

//添加键值对
[dict setObject:@"luoguankun" forKey:@"name"];
[dict setObject:@"北京" forKey:@"address"];

//当设置了重复的key时,会覆盖以前的,所以dictionary中的key是唯一的,value可以重复
[dict setObject:@"luo" forKey:@"name"];

NSLog(@"%@",dict[@"name"]); //luo

//删除某个key所指向的键值对
[dict removeObjectForKey:@"address"];

Dictionary字典集合的遍历


 NSDictionary *dict = @{@"name": @"luoguankun",@"address":@"北京"};

//通过for循环遍历NSDictionary,不推荐
NSArray *keys = [dict allKeys];
for (int i = 0; i < keys.count ; i++) {
    NSString *value = [dict objectForKey:keys[i]];
    NSLog(@"%@---%@",keys[i],value);
}

//推荐使用这种遍历方式,通过block遍历集合
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    NSLog(@"%@-%@",key,obj);

    //打印一次就停止
    *stop = YES;
}];

遍历集合

方式一(for)


//NSArray快速遍历
NSArray *array1 = @[@"a",@"b",@"c",@"d",@"f",@"g"];

//普通的for循环
for(int i = 0; i < array.count; i++)
{
    NSLog(@"%@",array[i]);
}

方式二(for in)


//很像java中的foreach
//id obj 代表着集合中的每一个元素
for(id obj in array1)
{
    //找出obj元素在数组中的位置
    unsigned long i = [array1 indexOfObject:obj];

    NSLog(@"%ld=%@",i,obj);
}

方式三(block)推荐


// 每遍历到一个元素,就会调用一次block
// 并且把当前元素和索引位置当做参数传给block
// stop的作用相当于break,终止循环
// 设置为YES,就停止循环
//obj代表当前元素对象
//idx代表元素下标
[array1 enumerateObjectsUsingBlock:
    ^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%ld = %@", idx,obj);

        if(idx == 2)
        {
            *stop = YES;
        }
    }
];

//block遍历集合的本质
void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *step)
{
    NSLog(@"%ld - %@", idx, obj);

    if (idx == 2) {
        //停止遍历
        *step = YES;
    }
};


for (int i = 0; i < array1.count; i++) {

    //用来标记是否需要停止遍历
    BOOL isStop = NO;

    //取出元素
    id obj = array1[i];

    myblock(obj, i, &isStop);

    if (isStop) {
        break;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

OC系列之Foundation框架

一 Foundation框架介绍 框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合。 Foundation框架中的类Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对...
  • ab20514
  • ab20514
  • 2015年10月04日 17:25
  • 623

OC中Foundation框架知识总结

一个框架(Framework)就是一个软件包,它包含多个类。Mac 操作系统提供了几十个框架,从而帮助软件开发人员迅速地在Mac 系统上开发应用程序。在这些框架中,有一 些称为基础框架。基础框架就是...
  • wutengwei007
  • wutengwei007
  • 2015年02月06日 11:26
  • 374

OC语言自学《十二》---- OC(Foundation框架部分知识总结)

NSRange 表示一个范围  主要用来操作字符串 代码示例: 01 //NSRange是一个结构体,其中location是一个以0为开始的i...
  • weini_xiong
  • weini_xiong
  • 2014年04月29日 19:00
  • 355

ios_Cocoa框架 “Foundation”和“UIKit”的区别

Cocoa Cocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这...
  • hw_2396611405
  • hw_2396611405
  • 2015年12月05日 11:04
  • 4315

黑马程序员————OC中Foundation框架知识总结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一个框架(Framework)就是一个软件包,它包含多个类。Mac 操作系统提供了几十...
  • whymerain
  • whymerain
  • 2015年03月19日 14:11
  • 278

Spring框架知识要点总结(第一天)

1.IOC容器创建的2种方式 //首先在applicationContext.xml配置文件中写 //创建方式一: //Spring把所有的配置文件都当做资源 ClassPathResourc...
  • qq_1017097573
  • qq_1017097573
  • 2016年11月22日 11:57
  • 620

Foundation框架解析

字符串(NSString与NSMutableString)创建字符串int main(int argh, char * argv[]) { @autoreleasepool { ...
  • github_33393668
  • github_33393668
  • 2016年02月24日 13:18
  • 589

Java集合框架知识点总结

java集合一个很重要的知识点,里面包含的集合框架体系也是很大的,但是实际运用的重要还是ArrayList,本文对java集合部分知识点做概述。...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年09月09日 15:08
  • 1515

Spring知识点总结

在学习Spring之前,先了解Spring是什么。百度百科上解释:Spring是分层的JavaSE/EE full-stack轻量级开源框架,以IoC(Inverse of Control 反转控制)...
  • zjx86320
  • zjx86320
  • 2015年06月29日 20:06
  • 3576

javaweb三大框架(ssh)知识点总结

一、Struts2的总结 1、Struts 2的工作流程,从请求说起 (1)客户端浏览器发出HTTP请求。 (2)根据web.xml配置,该请求被FilterDispatcher接收。 (3)...
  • my_name_nb
  • my_name_nb
  • 2017年02月06日 16:34
  • 2596
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OC(Foundation框架部分知识总结)
举报原因:
原因补充:

(最多只允许输入30个字)