在之前的博文中,我们创建的项目文件的时候,默认都有引用#import <Foundation/foundation.h> 这个头文件。但是,之前我们对Foundation都没有展开介绍。这篇博文,我们就揭开它神秘的面纱。

  之前,我们有提到过OC使用的是Cocoa框架。那么Cocoa和Foundation之间,有啥关联呢?实际上,Cocoa是由许多个不同的框架组成的。最常用的是Foundation和Application Kit。

  Foundation框架中有很多有用的、面向数据的简单类和数据类型。是由许多类,方法,函数,文档按照一定的逻辑组织起来的几何。数据类型主要如:NSString,NSArray,NSNumber等,将近有100多个类,都可以在Xcode的安装文档中找到具体的使用方法。

  那么,接下来,我们就对几个主要的类型的使用进行简单的实例说明。

一、字符串NSString类型)

  格式字符%@可以显示字符串,数组,字典和集合的全部内容。

  1. 字符串比较

 NSString *thing1 =@“hello ”;
NSString *thing2 = [NSString stringWithFormat: @"hello %d",];
if([thing1 isEqualToString: thing2])
{
NSLog(@"They are the same!");
}

  这里,我们可以看到。用到了两个字符串的方法,stringWithFormat:是格式化字符串输出。isEqualToString:是判断两个字符串是否相同。

那么,isEqualToString和直接用“==”来判断是否相同,有啥区别呢?

  用“==”运算符比较,只能判断thing1和thing2的指针数值是否相同。而不能判断是否指向同一个对象。由于thing1和thing2是不同的字符串,所有这边用这个运算符比较的话,会被认为是不同的。

  2. 字符串的可变性

  在OC中,NSString类型是不可变的,即:一旦被创建,便不能变化。如果要对字符串进行改变的话,则在Cocoa中,提供了一个NSString的子类,叫NSMutableString

 NSMutableString *string = [NSMutableString stringWithCapacity:];
[string appendString: @"Hello "];
[string appendFormat: @"NSString %d", 2];

定义用的关键字:stringWithCapacity。运行结果等于string被两次赋值,最后结果是:“Hello NSString 2”。

二、集合类型NSArrayNSDictionary

  集合类型,就相当于C语言中的数组。NSArray是一个Cocoa类,用来存储对象的有序列表。只能存OC对象,而不能存C语言的基本数据类型。同时,也不能直接存nil(对象的NULL值)。

  1. 创建一个NSArray的格式:

 NSArray *array1 = [NSArray arrayWithObjects: @"one", @"two", @"three", nil];

  这里,我们定义的集合有三个元素,最后面的nil并不是一个元素,而是结束的标记符号。这也是为什么集合类型不能存nil的原因。

只要是个集合,就有count获取集合中元素的个数,index来获取指定位置的元素。注意,获取元素的index值不能大于集合总数count,否则会报错!

for(NSInteger i=; i< [array1 count]; i++)
{
NSLog(@"index %d is %@", i, [array1 objectAtIndex: i]);
}

  2. 可变集合

  和NSString一样,NSArray创建也是不可变对象,一旦创建就不能被修改。因此,集合类型也有子类型是可以变的:NSMutableArray

和NSString一样,定义可变集合也有配套的关键字:arrayWithCapacity

 NSMutableArray *array = [NSMutableArray arrayWIthCapacity: ];
for(NSInteger i=; i<; i++)
{
Tire *tire = [[Tire alloc] init];
[array addObject: tire];
}

  有add的添加方法,当然也有remove的删除方法。如果,对集合中第二个元素不喜欢,则可以:

 [array removeObject: ]; // 元素索引从0开始。

  3.NSDictionary类型

  看名字,顾名思义是字典类型,是关键字及其定义的集合。

定义字典类型对象的格式:

 NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys: t1, @"tire1", t2, @"tire2", t3, @"tire3", nil]; // 也是用nil表示结束

字典类型还有一种创建方法:

 NSMutableDictionary *tires = [NSMutableDictionary dictionary];
[tires setObject:t1 forKey:@"tire1"];
[tires setObject:t2 forKey:@"tire2"];
[tires setObject:t3 forKey:@"tire3"];

如果要删除字典中的元素,可以用:

 [tires removeObjectForKey: @"tire1"];

《objective-c基础教程》学习笔记(九)—— Foundation框架介绍的更多相关文章

  1. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  2. 【学习笔记】Python基础教程学习笔记

    教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")----- ...

  3. 匿名内部类--毕向东java基础教程学习笔记

    1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...

  4. 内部类--毕向东Java基础教程学习笔记

    内部类的访问规则 1. 内部类可以直接访问外部类的成员,包括私有. 之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this 2.外部类要访问内部类,必须建立内部类对象 ...

  5. 异常处理——毕向东Java基础教程学习笔记

    1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象.                        其实 ...

  6. 《嵌入式Linux基础教程学习笔记一》

    常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...

  7. Objective-C基础教程学习笔记(附录)从Java转向Objective-C

    Java接口与Objective- C正式协议类似,因为它们都需要实现一组方法.Java具有抽象类,但Objective-C没有.Java具有类变量,但在Objective-C中, 可以使用文件范围内 ...

  8. Python基础教程学习笔记:第二章 列表和元组

    1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...

  9. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  10. Objective-c基础知识学习笔记

    Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...

随机推荐

  1. Unity3D研究院之使用Animation编辑器编辑动画(五十四)

     Unity提供了Animation编辑器,它可以为我们编辑物理动画.举个例子比如场景中有一个来回摇动的秋千,这个秋千在项目中完全只起到衬托作用,它不会与别的游戏对象有任何交互.如果这个秋千也用代码来 ...

  2. OpenGL(一)——入门学习

    概要 1. 为什么使用OpenGL 2. 在VS2008上搭建环境 3. 一个简单的例程 OpenGL相较于DirectX的优越性 1. 与C语言紧密结合 OpenGL命令最初就是用C语言函数来进行描 ...

  3. RabbitMq基本使用

    1.新建一个vhost : rabbitmqctl add_vhost test 2.新建一个用户: rabbitmqctl add_user news news 3.对这个news用户增加test ...

  4. 分享MYSQL中的各种高可用技术(源自姜承尧大牛)

    分享MYSQL中的各种高可用技术(源自姜承尧大牛) 图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各 ...

  5. SQL语句汇总(一)——数据库与表的操作以及创建约束

    首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...

  6. Dynamic CRM 2013学习笔记(三)快速创建实体 EntityCreater

    一.实体简介 实体用于在 Microsoft Dynamics CRM 中建立业务数据模型和管理业务数据.例如,可以使用客户.市场活动和事件(案例)等实体跟踪和支持销售.市场营销和服务活动.实体具有一 ...

  7. EntityFramework中使用Repository装饰器

    铺垫 通常在使用 EntityFramework 时,我们会封装出 IRepository 和 IUnitOfWork 接口,前者负责 CRUD 操作,后者负责数据提交 Commit. public ...

  8. 更改MySql表和字段区分大小写

    数据库和表名在 Windows 中是大小写不敏感的 ,而在大多数类型的 Unix 系统中是大小写敏感的Windows 版的 MySQL 默认继承 os 的大小写习惯,即使 SQL中有区分,在导入的时候 ...

  9. Linux基础精华

    Linux基础精华 (继续跟新中...) 常用命令: Linux shell 环境 让你提升命令行效 率的 Bash 快捷键 [完整版] 设置你自己的liux alias Linux的Find使用 L ...

  10. SignalR初体验

    简介 ASP .NET SignalR[1]  是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以 ...