Objective-C代码学习大纲(6)
本文为台湾出版的《Objective-C学习大纲》的翻译文档,系统介绍了Objective-C代码,很多名词为台湾同胞特指词汇,在学习时仔细研读才能体会。
Foundation framework classes
Foundation framework 地位如同 C++ 的 Standard Template Library。不过 Objective-C 是真正的动态识别语言(dynamic types),所以不需要像 C++ 那样肥得可怕的样版(templates)。这个 framework 包含了物件组、网路、执行绪,还有更多好东西。
NSArray
- main.m
- #import
- #import
- #import
- #import
- #import
- void print( NSArray *array ) {
- NSEnumerator *enumerator = [array objectEnumerator];
- id obj;
- while ( obj = [enumerator nextObject] ) {
- printf( "%s\n", [[obj description] cString] );
- }
- }
- int main( int argc, const char *argv[] ) {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSArray *arr = [[NSArray alloc] initWithObjects:
- @"Me", @"Myself", @"I", nil];
- NSMutableArray *mutable = [[NSMutableArray alloc] init];
- // enumerate over items
- printf( "----static array\n" );
- print( arr );
- // add stuff
- [mutable addObject: @"One"];
- [mutable addObject: @"Two"];
- [mutable addObjectsFromArray: arr];
- [mutable addObject: @"Three"];
- // print em
- printf( "----mutable array\n" );
- print( mutable );
- // sort then print
- printf( "----sorted mutable array\n" );
- [mutable sortUsingSelector: @selector( caseInsensitiveCompare: )];
- print( mutable );
- // free memory
- [arr release];
- [mutable release];
- [pool release];
- return 0;
- }
output
- ----static array
- Me
- Myself
- I
- ----mutable array
- One
- Two
- Me
- Myself
- I
- Three
- ----sorted mutable array
- I
- Me
- Myself
- One
- Three
- Two
阵列有两种(通常是 Foundation classes 中最资料导向的部分),NSArray 跟 NSMutableArray,顾名思义,mutable(善变的)表示可以被改变,而 NSArray 则不行。这表示你可以製造一个 NSArray 但却不能改变它的长度。
你可以用 Obj, Obj, Obj, ..., nil 为参数唿叫建构子来初始化一个阵列,其中 nil 表示结尾符号。
排序(sorting)展示如何用 selector 来排序一个物件,这个 selector 告诉阵列用 NSString 的忽略大小写顺序来排序。如果你的物件有好几个排序方法,你可以使用这个 selector 来选择你想用的方法。
在 print method 裡,我使用了 description method。它就像 Java 的 toString,会回传物件的 NSString 表示法。
NSEnumerator 很像 Java 的列举系统。while ( obj = [array objectEnumerator] ) 行得通的理由是 objectEnumerator 会回传最后一个物件的 nil。在 C 裡 nil 通常代表 0,也就是 false。改用 ( ( obj = [array objectEnumerator] ) != nil ) 也许更好。
NSDictionary
- main.m
- #import
- #import
- #import
- #import
- #import <<>
- #import
- void print( NSDictionary *map ) {
- NSEnumerator *enumerator = [map keyEnumerator];
- id key;
- while ( key = [enumerator nextObject] ) {
- printf( "%s => %s\n",
- [[key description] cString],
- [[[map objectForKey: key] description] cString] );
- }
- }
- int main( int argc, const char *argv[] ) {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
- @"one", [NSNumber numberWithInt: 1],
- @"two", [NSNumber numberWithInt: 2],
- @"three", [NSNumber numberWithInt: 3],
- nil];
- NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];
- // print dictionary
- printf( "----static dictionary\n" );
- print( dictionary );
- // add objects
- [mutable setObject: @"Tom" forKey: @"tom@jones.com"];
- [mutable setObject: @"Bob" forKey: @"bob@dole.com" ];
- // print mutable dictionary
- printf( "----mutable dictionary\n" );
- print( mutable );
- // free memory
- [dictionary release];
- [mutable release];
- [pool release];
- return 0;
- }
output
- ----static dictionary
- 1 => one
- 2 => two
- 3 => three
- ----mutable dictionary
- bob@dole.com => Bob
- tom@jones.com => Tom
优点与缺点
优点
Cateogies
Posing
动态识别
指标计算
弹性讯息传递
不是一个过度复杂的 C 衍生语言
可透过 Objective-C++ 与 C++ 结合
缺点
不支援命名空间
不支援运算子多载(虽然这常常被视为一个优点,不过正确地使用运算子多载可以降低程式码复杂度)
语言裡仍然有些讨厌的东西,不过不比 C++ 多
Objective-C代码学习大纲(6)的更多相关文章
- Objective-C代码学习大纲(3)
Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...
- Objective-C代码学习大纲(5)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(4)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(2)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- Objective-C代码学习大纲(1)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- 大数据Python学习大纲
最近公司在写一个课程<大数据运维实训课>,分为4个部分,linux实训课.Python开发.hadoop基础知识和项目实战.这门课程主要针对刚从学校毕业的学生去应聘时不会像一个小白菜一样被 ...
- JVM学习——学习方法论&学习大纲
2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上 ...
- u-boot代码学习内容
前言 u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...
- Linux 系统从入门到精通的学习大纲;
以前没有接触过Linux,生产环境需要,有时候遇到问题,百度一下,问题解决了,在遇到问题,在百度,有时候问题是如何解决的,为什么会解决有点丈二的和尚摸不着头脑, 为此,想用一段时间,系统的学习下Lin ...
随机推荐
- maven 私服中央库使用阿里云库
1.admin登录 进入remote repositories management 2. 设置地址
- Mysql主从同步(1)-主从/主主环境部署梳理
转 :https://www.cnblogs.com/kevingrace/p/6256603.html
- 源码分析:Java堆的创建
虚拟机在内存中申请一片区域,由虚拟机自动管理,用来满足应用程序对象分配的空间需求,即堆空间. 由于程序运行的局部特性,程序创建的大多数对象都具有非常短的生命周期,而程序也会创建一些生命周期特别长的对象 ...
- C# fixed详解
相信很多人在这样或那样的项目中,或者无意间看到了fixed语句块,看到之后你肯定会疑问: 1.这个fixed关键字是做什么用的? 2.什么情况下需要该关键字? 3.这个关键字该怎么用? 我相信解决了上 ...
- linux 无外网情况下安装 mysql
由于工作需要,需要在一台装有 CentOS 系统的测试服务器上安装 MySQL ,由于该服务器上存有其他比较重要的测试数据,所以不能连接外网.由于之前安装 MySQL 一直都是使用 yum 命令一键搞 ...
- Git和Repo管理使用简要介绍
在Linux平台下进行Android系统项目开发时,需要Git或repo管理. 一. Git和Repo的区别: 1. Git:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的 ...
- Android中<uses-sdk>属性和target属性分析
1. 概要 <uses-sdk> 用来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的平台版本.通过在manifest清单文件中添加该属性,我们可以更好的控制 ...
- Android Studio运行程序,检测不到(夜神、Genymotion)模拟器
用了统一给的android studio,运行程序,检测不到模拟器(夜神). 又新建了一个系统的模拟器,运行,提示ANDROID_SDK_ROOT is undefined 在环境变量中配置之后,夜神 ...
- string--C++ STL 学习
C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,提供了添加删除\替换\查找和比较等丰富的方法. 使用string容器,需要包含头文件声明#include ...
- Cocos2d-x 3.1.1 学习日志7--7分钟让你了解cocos2d-x3.1.1 Sprite精灵类
精灵(Sprite)是游戏里面的角色,比方敌人.游戏里面运动的物体等等,所以精灵是游戏里面一个很常见的概念.差点儿无处不在. 在Cocos2D-x里面精灵是用Sprite类来进行表示的,它能够用一张图 ...
