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 ...
随机推荐
- 最简单的TCP网络封包解包(补充)-序列化
如若描述或者代码当中有谬误之处,还望指正. 将数据能够在TCP中进行传输的两种方法1.直接拷贝struct就可以了:2.序列化. 拷贝Struct存在的问题1.不能应付可变长类型的数据,比如STL中的 ...
- Ubuntu中建立ftp 503错误解决办法
The problem is because your folder is owned by root, instead of ftpuser. To fix it run: sudo chown - ...
- Apache、Tomcat负载均衡与集群
一. 环境准备 1.软件下载 a) apache_2.0.55-win32-x86-no_ssl.msi: b) apache-tomcat-5.5.17.rar c) mod_jk-apache-2 ...
- mysql启动错误之mysql启动报1067错误如何解决
MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:Plugin 'FEDERATED' is disabled. 解决方法: 1.在MY.INI文件中的 ...
- android studio 使用问题记录
android studio 使用问题记录 下载地址:FQ或园子内好心人提供的国内地址: http://www.cnblogs.com/bjzhanghao/archive/2012/11/14/an ...
- "围观"设计模式(2)--里氏替换原则(LSP,Liskov Substitution Principle)
在面向对象的程序设计中.里氏替换原则(Liskov Substitution principle)是对子类型的特别定义.它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为 ...
- java synchronized究竟锁住的是什么
刚学java的时候,仅仅知道synchronized一个线程锁.能够锁住代码,可是它真的能像我想的那样,能够锁住代码吗? 在讨论之前先看一下项目中常见关于synchronized的使用方法: publ ...
- PKI/CA
PKI( Public Key Infrastructure )指的是公钥基础设施. CA ( Certificate Authority )指的是认证中心. PKI从技术上解决了网络通信安全的种种障 ...
- python3用pillow生成验证码,tornado中输出图片
原文链接http://blog.csdn.net/cdnight/article/details/49636893
- 设置open_cursors参数
1.进入终端,输入命令:sqlplus /nolog 2.输入命令:conn /as sysdba 3.输入命令:alter system set open_cursors=1000 scope=me ...