2011-05-11 14:06 佚名 otierney 字号:T | T

本文为台湾出版的《Objective-C学习大纲》的翻译文档,系统介绍了Objective-C代码,很多名词为台湾同胞特指词汇,在学习时仔细研读才能体会。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!

Foundation framework classes

Foundation framework 地位如同 C++ 的 Standard Template Library。不过 Objective-C 是真正的动态识别语言(dynamic types),所以不需要像 C++ 那样肥得可怕的样版(templates)。这个 framework 包含了物件组、网路、执行绪,还有更多好东西。

NSArray

  1. main.m
  2. #import
  3. #import
  4. #import
  5. #import
  6. #import
  7. void print( NSArray *array ) {
  8. NSEnumerator *enumerator = [array objectEnumerator];
  9. id obj;
  10. while ( obj = [enumerator nextObject] ) {
  11. printf( "%s\n", [[obj description] cString] );
  12. }
  13. }
  14. int main( int argc, const char *argv[] ) {
  15. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  16. NSArray *arr = [[NSArray alloc] initWithObjects:
  17. @"Me", @"Myself", @"I", nil];
  18. NSMutableArray *mutable = [[NSMutableArray alloc] init];
  19. // enumerate over items
  20. printf( "----static array\n" );
  21. print( arr );
  22. // add stuff
  23. [mutable addObject: @"One"];
  24. [mutable addObject: @"Two"];
  25. [mutable addObjectsFromArray: arr];
  26. [mutable addObject: @"Three"];
  27. // print em
  28. printf( "----mutable array\n" );
  29. print( mutable );
  30. // sort then print
  31. printf( "----sorted mutable array\n" );
  32. [mutable sortUsingSelector: @selector( caseInsensitiveCompare: )];
  33. print( mutable );
  34. // free memory
  35. [arr release];
  36. [mutable release];
  37. [pool release];
  38. return 0;
  39. }

output

  1. ----static array
  2. Me
  3. Myself
  4. I
  5. ----mutable array
  6. One
  7. Two
  8. Me
  9. Myself
  10. I
  11. Three
  12. ----sorted mutable array
  13. I
  14. Me
  15. Myself
  16. One
  17. Three
  18. 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

  1. main.m
  2. #import
  3. #import
  4. #import
  5. #import
  6. #import <<>
  7. #import
  8. void print( NSDictionary *map ) {
  9. NSEnumerator *enumerator = [map keyEnumerator];
  10. id key;
  11. while ( key = [enumerator nextObject] ) {
  12. printf( "%s => %s\n",
  13. [[key description] cString],
  14. [[[map objectForKey: key] description] cString] );
  15. }
  16. }
  17. int main( int argc, const char *argv[] ) {
  18. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  19. NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
  20. @"one", [NSNumber numberWithInt: 1],
  21. @"two", [NSNumber numberWithInt: 2],
  22. @"three", [NSNumber numberWithInt: 3],
  23. nil];
  24. NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];
  25. // print dictionary
  26. printf( "----static dictionary\n" );
  27. print( dictionary );
  28. // add objects
  29. [mutable setObject: @"Tom" forKey: @"tom@jones.com"];
  30. [mutable setObject: @"Bob" forKey: @"bob@dole.com" ];
  31. // print mutable dictionary
  32. printf( "----mutable dictionary\n" );
  33. print( mutable );
  34. // free memory
  35. [dictionary release];
  36. [mutable release];
  37. [pool release];
  38. return 0;
  39. }

output 

  1. ----static dictionary
  2. 1 => one
  3. 2 => two
  4. 3 => three
  5. ----mutable dictionary
  6. bob@dole.com => Bob
  7. tom@jones.com => Tom

优点与缺点

优点

Cateogies

Posing

动态识别

指标计算

弹性讯息传递

不是一个过度复杂的 C 衍生语言

可透过 Objective-C++ 与 C++ 结合

缺点

不支援命名空间

不支援运算子多载(虽然这常常被视为一个优点,不过正确地使用运算子多载可以降低程式码复杂度)

语言裡仍然有些讨厌的东西,不过不比 C++ 多

Objective-C代码学习大纲(6)的更多相关文章

  1. Objective-C代码学习大纲(3)

    Objective-C代码学习大纲(3) 2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍 ...

  2. Objective-C代码学习大纲(5)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  3. Objective-C代码学习大纲(4)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  4. Objective-C代码学习大纲(2)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  5. Objective-C代码学习大纲(1)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  6. 大数据Python学习大纲

    最近公司在写一个课程<大数据运维实训课>,分为4个部分,linux实训课.Python开发.hadoop基础知识和项目实战.这门课程主要针对刚从学校毕业的学生去应聘时不会像一个小白菜一样被 ...

  7. JVM学习——学习方法论&学习大纲

    2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上 ...

  8. u-boot代码学习内容

    前言  u-boot代码庞大,不可能全部细读,只能有选择的读部分代码.在读代码之前,根据韦东山教材,关于代码学习内容和深度做以下预先划定. 一.Makefile.mkconfig.config.mk等 ...

  9. Linux 系统从入门到精通的学习大纲;

    以前没有接触过Linux,生产环境需要,有时候遇到问题,百度一下,问题解决了,在遇到问题,在百度,有时候问题是如何解决的,为什么会解决有点丈二的和尚摸不着头脑, 为此,想用一段时间,系统的学习下Lin ...

随机推荐

  1. opensips编译安装时可能遇到的问题

    错误一: ERROR: could not load the script in /usr/local//lib64/opensips/opensipsctl/opensipsdbctl.pgsql ...

  2. html学习一(html简史及doctype)

    html3部分 doctype(html) dtd head body 一.深入浅出HTML与XHTML的区别 HTML(HyperText Markup Language,超文本标记语言)最早的HT ...

  3. scikit-learn:在实际项目中用到过的知识点(总结)

    零.全部项目通用的: http://blog.csdn.net/mmc2015/article/details/46851245(数据集格式和预測器) http://blog.csdn.net/mmc ...

  4. SMBUS讀取數據的方法

    第一步     将HST_D0寄存器清零 第二部     确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写清零) 第三步     往XMIT_SLVA(SMB_BAS ...

  5. [svc]salt安装lamp

    在批量安装软件前,先找台测试机yum装一遍,看是否报错等,是否依赖包全等 . 本次我们在dev环境下搞. 先看一下已搞成功的目录结构 定义dev环境的第二个好处 搞清楚逻辑结构和调用关系很重要,不然之 ...

  6. MongoDB Query 的几个方法

    Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...

  7. 穷人的语义处理工具箱之中的一个:语义版Jaccard

    /* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 |为什么我们是ML界的穷人 假设对工业界里的机器学习(ML)从业者进行阶级划分的话,划线标准不是你用的 ...

  8. 利用css3背景位置完成拼图

    .duo { width: 623px; height: 417px; margin: 100px auto; background: url(images/bg1.png) left top no- ...

  9. poj3261(后缀数组)

    题意:给出一串长度为n的字符,再给出一个k值,要你求重复次数大于等于k次的最长子串长度........ 思路:其实也非常简单,直接求出height值,然后将它分组,二分答案......结果就出来了.. ...

  10. hive 中与mysql 中函数同名不同意的方法记录

    max 函数 在hive中max函数是一个聚合函数,所以,而且返回值是double ,而且后面必须跟group by ,这个和mysql差异很大 Built-in Aggregate Function ...