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 ...
随机推荐
- 《转》CentOS7 安装MongoDB 3.0server (3.0的优势)
1.下载&安装 MongoDB 3.0 正式版本号公布!这标志着 MongoDB 数据库进入了一个全新的发展阶段,提供强大.灵活并且易于管理的数据库管理系统.MongoDB宣称.3.0新版本号 ...
- unity, undo
如果在操作一个Object之前调用Undo.RecordObject(Object),且操作确实造成Object某些属性的改变,则会产生一个undo记录. 如果我们的架构不是直接操作Object,而是 ...
- Atitit。团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ??
Atitit.团队建设--管理最佳实践--如何留住核心人才,防止人才流失 ?? 1. 1.人才流失后果 1 1. 1.员工的离职带走商业技术秘密和客户等资源 1 2. 2.影响在职员工的情绪,极大挫伤 ...
- 使用【单独】的一个<script>进行js文件的引用
刚才用jQuery的时候,总是发现js代码不被执行...后来发现我的代码是这么写的: <script type="text/javascript" src="htt ...
- 基础地图Android SDK
开发者可利用SDK提供的接口,使用百度为您提供的基础地图数据.目前百度地图SDK所提供的地图等级为3-21级,所包含的信息有建筑物.道路.河流.学校.公园等内容. V3.7.0起,地图支持缩放至21级 ...
- 基于jquery的适合电子商务网站首页的图片滑块
今天给大家分享一款基于Sequence.js 的图片滑动效果,特别适合电子商务网站或者企业产品展示功能.带有图片缩率图,能够呈现全屏图片浏览效果.结合 CSS3 Transition 实现响应式的滑块 ...
- oracle 数据库中,应用程序里的连接探測语句的正确使用
oracle 数据库中,应用程序里的连接探測语句的正确使用 本文为原创文章.转载请注明出处:http://blog.csdn.net/msdnchina/article/details/3851376 ...
- /proc/meminfo分析
参考: 1. linux/Documentation/filesystems/proc.txt 2. Linux 中 /proc/meminfo 的含义 3. redhat deployment gu ...
- error: No implicit Ordering defined for Any
scala中经常遇到最头疼的问题,就是类型不匹配或者带Any,Option的提示错误信息. 最近碰到的是取最大值,但是明明已经Long类型的,却提示下面这个错误信息. 相关的源程序如下: // 获取o ...
- 0810 smarty
1.Smarty简介(why,what) why:smarrty 将前端工程师和程序员的工作分开,让前端工程师完成前台页面的工作,程序员完成后台的业务逻辑.what模版引擎是用来将PHP代码和模版页组 ...
