obj-c编程10:Foundation库中类的使用(1)[数字,字符串]
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj-c编译器,但是平台开发框架还是在mac上啊.比如cocoa框架包括Foundation框架,Application Kit框架和Core Data的第三方框架;二cocoa Touch指的则是Foundation,Core Data以及UIKit框架.对于Foundation框架中各个类的使用,可以到apple开发者网站在线查询:https://developer.apple.com/library/mac/navigation/
接下来我们不按顺序,专挑难点,奇怪点和好玩点(如果有的话)的类来看看,直接用代码说话喽
#import<Foundation/Foundation.h>
int main(int argc, char *argv[]){
@autoreleasepool {
NSNumber *n;
NSInteger integer; //not a class just a typedef
n = [NSNumber numberWithInteger: 101];
integer = [n integerValue];
NSLog(@"%li",(long)integer);
NSNumber *n1 = [[NSNumber alloc] initWithLong:0x12345678];
[n1 initWithLong :0xabcd]; //can't change org value 0x12345678!
integer = [n1 longValue];
NSLog(@"%lx",(long)integer);
NSString *str = @"hello apple";
NSLog(@"str is : %@",str);
NSLog(@"num is : %@",n);
NSLog(@"Hello World!");
}
return 0;
}
注意代码中%@打印NSNumber型变量的行了吗?有人可能会问这是怎么实现的,我开始也以为%@只能格式化显示NSString类型啊.其实只要类中定义了description方法,就可以以自定义格式显示任何对象的内容啦.这个我们来写个简单类试一下:
#import<Foundation/Foundation.h>
@interface A:NSObject{
int i;
}
-(id)init:(int)i_v;
@end
@implementation A
-(id)init:(int)i_v{
self = [super init];
if(self){
i = i_v;
}
return self;
}
-(NSString*)description{
return [NSString stringWithFormat:@"#i is %d#",i];
}
@end
int main(int argc, char *argv[]){
@autoreleasepool {
A *a = [[A alloc] init:99];
NSLog(@"a is %@",a);
}
return 0;
}
注意description方法的实现中stringWithFormat方法的2个参数分割符哦,不是:号而是逗号(,)哦.执行结果如下
wisy@wisy-ThinkPad-X61:~/src/objc_src$ clang -O3 -g0 $OBJ_C_OPT -lobjc -lgnustep-base -o f f.m wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f 2014-07-01 12:42:59.380 f[4179] a is #i is 99#
Foundation中的字符串操作看起就显得那么蛋疼,简单的东西给搞的蛮复杂的,尤其是方法名,貌似还驼峰状,我呵呵了.字符串类分为可变和不可变两种,前者类位NSString,后者类为NSMutableString.顾名思义,不可变字符串不可以修改自身,只能返回一个修改后的新字符串,而可变字符串可以修改自身,包括删除subString,拼接啊,替换啊,皆可,下面上代码:
#import<Foundation/Foundation.h>
int main(int argc, char *argv[]){
@autoreleasepool {
NSString *str_no_m = @"hello world";
NSMutableString *str_m;
NSRange substr; //just a struct
str_m = [NSMutableString stringWithString: str_no_m];
NSLog(@"%@",str_m);
[str_m insertString: @" xxx" atIndex: 5];
NSLog(@"%@",str_m);
[str_m appendString: @" not_fix!"];
NSLog(@"%@",str_m);
[str_m deleteCharactersInRange: NSMakeRange(6,4)]; //(index,len)
NSLog(@"%@",str_m);
substr = NSMakeRange(6,6);
[str_m deleteCharactersInRange: substr];
NSLog(@"%@",str_m);
substr = [str_m rangeOfString: @"_"];
if(substr.location != NSNotFound){
[str_m deleteCharactersInRange: substr];
}
NSLog(@"%@",str_m);
[str_m setString: @"new string!"];
NSLog(@"%@",str_m);
substr = [str_m rangeOfString: @"new"];
if(substr.location != NSNotFound){
[str_m replaceCharactersInRange: substr withString: @"old"];
}
NSLog(@"%@",str_m);
[str_m setString: @"1122334411223344"];
[str_m replaceOccurrencesOfString:@"2" withString:@"X" \
options:0 range:NSMakeRange(0,[str_m length])];
NSLog(@"%@",str_m);
}
return 0;
}
编译及运行结果如下:
wisy@wisy-ThinkPad-X61:~/src/objc_src$ clang -O3 -g0 $OBJ_C_OPT -lobjc -lgnustep-base -o f f.m wisy@wisy-ThinkPad-X61:~/src/objc_src$ ./f 2014-07-01 14:36:49.380 f[5719] hello world 2014-07-01 14:36:49.382 f[5719] hello xxx world 2014-07-01 14:36:49.382 f[5719] hello xxx world not_fix! 2014-07-01 14:36:49.383 f[5719] hello world not_fix! 2014-07-01 14:36:49.383 f[5719] hello not_fix! 2014-07-01 14:36:49.383 f[5719] hello notfix! 2014-07-01 14:36:49.383 f[5719] new string! 2014-07-01 14:36:49.383 f[5719] old string! 2014-07-01 14:36:49.383 f[5719] 11XX334411XX3344
注意其中的replaceOccurrencesOfString方法,其中的options可能的选项有:
Search and Comparison Options
Several of the search and comparison methods take an “options” argument. This is a bit mask that adds further constraints to the operation. You create the mask by combining the following options (not all options are available for every method):
|
Search option |
Effect |
|---|---|
|
Ignores case distinctions among characters. |
|
|
Performs a byte-for-byte comparison. Differing literal sequences (such as composed character sequences) that would otherwise be considered equivalent are considered not to match. Using this option can speed some operations dramatically. |
|
|
Performs searching from the end of the range toward the beginning. |
|
|
Performs searching only on characters at the beginning or, if |
|
|
When used with the |
Search and comparison are currently performed as if the NSLiteralSearch
option were specified.
至于我用的值0,我猜是默认选项吧?因为书上值为nil,编译有警告,遂换为0.
obj-c编程10:Foundation库中类的使用(1)[数字,字符串]的更多相关文章
- obj-c编程10:Foundation库中类的使用(2)[字符串,数组]
Foundation库的内容不可谓不多,就算很精简的说篇幅也受不了啊!笨猫一向反对博客文章一下子拖拖拉拉写一大坨!KISS哦!so将上一篇文章再分一篇来说,于是有了这篇,可能还会有(3)哦... 我发 ...
- obj-c编程10:Foundation库中类的使用(6)[线程和操作队列]
任何语言都不能避而不谈线程这个东东,虽然他是和平台相关的鸟,虽说unix哲学比较讨厌线程的说...线程不是万能灵药,但有些场合还是需要的.谈到线程就不得不考虑同步和死锁问题,见如下代码: #impor ...
- obj-c编程10:Foundation库中类的使用(5)[时间对象]
隔了好久才有了这新的一篇,还是无奈的时间啊!so这次我们就着重谈谈它喽. F库中有很多时间相关的类,比如NSDate,NSTimeInterval,NSTimeZone,NSDateComponent ...
- obj-c编程10:Foundation库中类的使用(4)[文件管理,查询当前进程信息]
接上一篇文件管理博文.我们可以用NSPathUtilities.h中包含的NSString函数和分类扩展来以兼容的方式处理路径.下面凡是有系统编程经验的童鞋都知道是啥意思了: #import < ...
- obj-c编程10:Foundation库中类的使用(3)[文件管理]
好吧,不管神马系统都无可避免的要说到文件,目录,路径(PATH)管理的内容,下面我们来看看在F库中对他们的支持.我简单看了下,不谈其他光从方法命名来说就多少显得有点复杂,如果和ruby相比就呵呵了. ...
- C++的XML编程经验――LIBXML2库使用指南[转]
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...
- Java 库:为 Java 程序员而生的 10 + 最佳库
众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...
- C++的XML编程经验――LIBXML2库使用指南
C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...
- 并发编程 10—— 任务取消 之 关闭 ExecutorService
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
随机推荐
- qq侧滑
上一篇博客带大家实现了:Android 自定义控件打造史上最简单的侧滑菜单 ,有兄弟看了以后说,你这滑动菜单过时了呀~QQ5.0的效果还不错~~嗯,的确,上一篇也承诺过,稍微修改上一篇的代码,实现QQ ...
- T-SQL 中的CROSS JOIN用法(半翻译)
突然发现个很吊的链接,我们来看看学习数据库要做些什么,胆小慎点:DBA工作内容!!!! 今天来翻译一篇关于T-SQL的文章,本文可供微软认证70-461:QueryingMicrosoft SQL S ...
- IT女孩特不烦恼---九月实习总结
对着岁月落笔,画出一场清风,那是最真的笑容 一溜烟的功夫,小编来实习Android已经四个月了,从刚开始的电商项目到现在的车段子项目,小编渐渐对这个曾经陌生的名字慢慢扭转变成熟悉的面孔,四个月的时间, ...
- Qt中事件分发源代码剖析
Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的. 下面举例说明: 1)首先看看下面一段示例代码: i ...
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- Android初级教程获取手机系统联系人信息
在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...
- android api 镜像站
项目地址:https://github.com/msdx/androiddoc 访问短址: http://androiddoc.qiniudn.com/
- (八十七)AutoLayout的简介与实例
AutoLayout是继AutoResizing之后的一种自动布局方法,解决了AutoResizing无法处理控件间相互关系的问题. AutoLayout在storyboard中通过底部工具条设置,底 ...
- 并发编程(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题
请阅读上篇文章<并发编程实战: POSIX 使用互斥量和条件变量实现生产者/消费者问题>.当然不阅读亦不影响本篇文章的阅读. Boost的互斥量,条件变量做了很好的封装,因此比" ...
- Linux IPC实践(13) --System V IPC综合实践
实践:实现一个先进先出的共享内存shmfifo 使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速; 我们首先完成C语言版本的shmfifo(基于过程调用) ...