魏兆辉的IOS基础学习笔记之十一 OC语言基础-06 Foundation框架介绍

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

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

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

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

一、字符串NSString类型)

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

  1. 字符串比较

1 NSString *thing1 [email protected]“hello 5”;
2 NSString *thing2 = [NSString stringWithFormat: @"hello %d",5];
3 if([thing1 isEqualToString: thing2])
4 {
5    NSLog(@"They are the same!");
6 }

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

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

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

  2. 字符串的可变性

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

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

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

二、集合类型NSArrayNSDictionary

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

  1. 创建一个NSArray的格式:

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

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

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

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

  2. 可变集合

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

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

1 NSMutableArray *array = [NSMutableArray arrayWIthCapacity: 5];
2 for(NSInteger i=0; i<5; i++)
3 {
4     Tire *tire = [[Tire alloc] init];
5     [array addObject: tire];
6 }

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

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

  3.NSDictionary类型

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

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

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

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

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

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

1 [tires removeObjectForKey: @"tire1"];
时间: 2025-01-07 15:16:53

魏兆辉的IOS基础学习笔记之十一 OC语言基础-06 Foundation框架介绍的相关文章

魏兆辉的IOS基础学习笔记之十 OC语言基础-05 @property关键字

在上一篇笔记中是学习了怎样手动编写getter和setter方法,相对来说复杂一些,今天学习了@property关键字就可以自动的生成这两个方法,十分方便, 另外在内存管理中,也可以使用这个关键字,省去了重写dealloc函数的麻烦,只需要写进去关键词就可以. 让系统自动合并setter和getter只要两个步骤: (1). 在类接口部分使用@property指令定义属性. (2). 在类实现的部分使用synthesize指令声明该属性即可. 所有,上面例子中定义Engine的存取方法我们可以修

魏兆辉的IOS基础学习笔记之九 OC语言基础-04 getter和setter方法

存取方法分为两种:setter方法和getter方法.setter方法,是为对象中的变量赋值.getter方法,是通过对象本身访问对象属性. 在Objective-c中,Cocoa框架在定义存取方法的时候,有相关的规定: (1). setter方法,根据它的所要去改变的属性名称来命名,并在前面加set前缀.如:setEngine,setTire等. (2). getter方法,则是以其返回的属性名称来命名,不要将get前缀加到getter方法名前面.因为在Cocoa中,get前缀有其他的用途.一

魏兆辉的IOS基础学习笔记之二 C语言基础-02

1. typedef 在前文中,我们用宏定义来定义了一个BOOL类型,那么现在就用更专业的方式来定义类型. typedef int Bool; int main (void){ Bool flag=1; if(flag) { printf("True"); } else { printf("false"); }} typedef 的作用就是类型定义(Type Definition). 类型定义有以下三个优点: 1. 易于阅读.比如我们可以把定义一个Dollar,然后

魏兆辉的IOS基础学习笔记之十二 OC语言基础-07 Foundation内存管理

本篇博文,将给大家介绍下再Objective-C中如何使用内存管理.一个程序运行的时候,如果不及时的释放没有用的空间内存.那么,程序会越来 越臃肿,内存占用量会不断升高.我们在使用的时候,就会感觉很卡,最终使得程序运行奔溃.因此,将无效的内存及时清理释放,是非常有必要的. 一个对象在最初创建使用,到最后的回收释放,经历的是怎样一个过程呢?包括:诞生(通过alloc或new方法实现).生存(接收消息并执行操作).交友(通过复合以及向方法传递参数).最终死去(被释放掉). 一.引用计数 在对象创建的

魏兆辉的IOS基础学习笔记之四 C语言基础-04 函数

1. 数组作为函数参数 函数是我们学习程序设计语言最基本的东西了,我在此不再赘述.只讨论一种特殊情况,就是数组作为函数的参数传递. 我们都知道,其实在传递数组的时候,实际上是传递了数组首元素的指针.明确了这一点之后,我们就可以思考下面的问题. 既然他只是传递了数组首元素的指针,那么他必然无法知道整个数组的大小,因此,我们如果希望在函数中用到数组的长度,必须要进行显式传递. int Sum(int a[],int size){ int i ,sum=0; for(i=0;i<size;i++) {

魏兆辉的IOS基础学习笔记之六 OC语言基础-01 面向对象

一听标题,感觉十分的抽象.面向对象就是(Object-Oriented Programming)的首字母缩写:OOP,是当今最主流的编程方法. 那么,面向对象编程具体有什么好处呢.是如何来实现呢?通过下面的实例,我想可以给大家最简单直观的理解了. 好了,下面就来说说我们这篇博文主要要介绍的内容吧.今天,我们通过一个绘制几何图形的实例来介绍基本的面向对象思想. 首先我们,新建一个Command Tools的命令行工具项目,选择Foundation头文件. 1 / 2 // main.m 3 //

魏兆辉的IOS基础学习笔记之十四 OC语言基础-09 OC对象的内存管理

一. 原理 对于任何继承了NSObject的对象,都有一个与之关联的整形变量,称为引用计数器:只有计数器的值为0的时候,OC就回收该对象,否则永不回收. 1. 创建对象时,如使用alloc ,new , copy,引用计数器的值为1 2. 当使用release方法释放时,计数器的值减1 3. 当使用retain方法时,计数器的值加1 4. 当对象被回收时候,自动调用对象的dealloc方法, 5. 使用retainCount方法来获取引用计数器的值 二. 防止内存泄露标准示例写法: @class

Python基础学习笔记(十一)函数与模块

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 4. http://www.runoob.com/python/python-modules.html 5. http://www.pythoner.com/ 6. http

Java基础学习笔记二十一 多线程

多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 什么是多线程呢?即就是一个程序中有多个线程在同时执行.通过下图来区别单线程程序与