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. jQuery MiniUI自定义单元格

    监听处理"drawcell"事件 使用"drawcell"事件,可以自定义单元格内容.样式.行样式等. grid.on("drawcell" ...

  2. TRIZ系列-创新原理-17-转变到新维度原理

    转变到新维度原理的表述例如以下:1)把物体的动作.布局从一维变成二维.二维变成三维,以此类推     假设物体在本维度上的运动或者定位非常困难.就能够过渡到更高维度上,一般路线为:直线运动--> ...

  3. atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结

    atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结 1. 建立AST 抽象语法树 Abstract Syntax Tree,AST) 1 ...

  4. CWidgetMgr---cpp

    #include "WidgetMgr.h" #include "XWidget.h" #include "Config.h" #inclu ...

  5. 基于HTML5 Canvas可撕裂布料效果

    分享一款布料效果的 HTML5 Canvas 应用演示,效果逼真.你会看到,借助 Canvas 的强大绘图和动画功能,只需很少的代码就能实现让您屏息凝神的效果. 在线预览   源码下载 实现的代码. ...

  6. 基于jQuery左侧小图滚动右侧大图显示代码

    今天给大家分享一款 jQuery左侧小图滚动右侧大图显示代码是一款基于jQuery实现的左侧滚动图片点击大图查看效果代码.该实例适用浏览器:IE8.360.FireFox.Chrome.Safari. ...

  7. Linux下C语言编程中库的使用

    零.问题 1. 为什么要用到库? 2. 我要用一个库,但是,尼玛命令行上该怎么写呢?或者说库文件如何使用? 3. Linux的库在那些地方? 4. 什么是静态库,什么是动态库,二者有啥区别? 5. 常 ...

  8. EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接

    EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到 ...

  9. linux socket can测试

    1. Overview / What is Socket CAN -------------------------------- The socketcan package is an implem ...

  10. Thinkphp3.2 PHPMailer 发送 QQ邮箱 163邮箱

    在进入正题这前先看下网易(163)邮箱的服务器地址和端口号 类型 服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号 收件服务器 POP pop.163.com 995 110 收件服务器 ...