obj-c编程10:Foundation库中类的使用(2)[字符串,数组]
Foundation库的内容不可谓不多,就算很精简的说篇幅也受不了啊!笨猫一向反对博客文章一下子拖拖拉拉写一大坨!KISS哦!so将上一篇文章再分一篇来说,于是有了这篇,可能还会有(3)哦...
我发现NSString有这样一个类方法蛮有趣的:stringWithContentsOfURL.看名称就知道是直接将get网页的内容,放在字符串这个类而不是以网络扩充的方式添加这个方法还是很有意思哦:
#import<Foundation/Foundation.h> int main(int argc, char *argv[]){ @autoreleasepool { //NSString *str_url = @"http://www.baidu.com"; NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; NSMutableString *str_url_get; str_url_get = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding \ error:NULL]; NSLog(@"get : %@\n",str_url_get); } 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 18:34:41.008 f[6877] get : <!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv= "content-type" content="text/html;charset=utf-8"><link rel="dns-prefetch" href="//s1.bdstatic.com"/> <link rel="dns-prefetch" href="//t1.baidu.com"/><link rel="dns-prefetch" href="//t2.baidu.com"/> <link rel="dns-prefetch" href="//t3.baidu.com"/><link rel="dns-prefetch" href="//t10.baidu.com"/> <link rel="dns-prefetch" href="//t11.baidu.com"/><link rel="dns-prefetch" href="//t12.baidu.com"/> <title>百度一下,你就知道</title><style >html,body{height:100%}html{overflow-y:auto}#wrapper{ position:relative;_position:;min-height:100%}#content{padding-bottom:100px;text-align:center} #ftCon{height:100px;position:absolute;bottom:44px;text-align:center;width:100%;margin:0 auto;z-index:0;overflow:hidden}#ftConw{width:720px;margin:0 auto}body{font:12px arial;text-align: ;background:#fff}body,p,form,ul,li{margin:0;padding:0;list-style:none}body,form,#fm{position:relative} td{text-align:left}img{border:0}a{color:#00c}a:active{color:#f60}.bg{background-image:url (http://s1.bdstatic.com/r/www/cache/static/global/img/icons_e540198d.png);background-repeat: no-repeat;_background-image:url(http://s1.bdstatic.com/r/www/cache/static/global/img/icons_ d2618985.gif)}.bg_tuiguang_browser{width:16px;height:16px;background-position:-600px 0;display: inline-block;vertical-align:text-bottom;font-style:normal;overflow:hidden;margin-right:5px}.
接下来聊聊Foundation库(以下均简称为F库)中的数组类,F库中的数组也分可变和不可变的,分别对应的类为NSArray和NSMutableArray类,后者是前者的子类.对于添加到可变数组对象的项必须都是对象而不能是C型的变量哦,这就要求我们"打包"了啊:
#import<Foundation/Foundation.h> int main(int argc, char *argv[]){ @autoreleasepool { NSMutableArray *ary = [NSMutableArray array]; NSNumber *num; for(int i = 0;i < 10;++i){ num = [NSNumber numberWithInteger:i]; [ary addObject: num]; } NSLog(@"show whole array:"); NSLog(@"%@",ary); } return 0; }
我们还可以把数字存入文件中,或者从文件中导入数组,下面只写了存入文件的代码:
if(![ary writeToFile:@"/home/wisy/src/objc_src/data.db" atomically:NO]) NSLog(@"write ary to file failed!");
我们知道在F库中有一些常见的类型,他们其实是结构,而结构变量是不能直接放在NSArry数组里的,这就要求打包和解包(wrapping和unwrapping),NSValue类可以完成此项任务:
#import <Foundation/Foundation.h> //#import <CGGeometry.h> //typedef float CGFloat; typedef struct CGPoint{ CGFloat x; CGFloat y; }CGPoint; int main(int argc, char *argv[]){ @autoreleasepool { NSMutableArray *ary = [NSMutableArray array]; NSNumber *num; for(int i = 0;i < 10;++i){ num = [NSNumber numberWithInteger:i]; [ary addObject: num]; } NSLog(@"show whole array:"); NSLog(@"%@",ary); if(![ary writeToFile:@"/home/wisy/src/objc_src/data.db" atomically:NO]) NSLog(@"write ary to file failed!"); CGPoint p = {.x = 100,.y = 200}; NSValue *pobj; pobj = [NSValue valueWithPoint:p]; [ary addObject:pobj]; } return 0; }
以上代码无法编译通过,我的linux上找不到CGGeometry.h这个头文件啊!虽然我定义了struct CGPoint但似乎没用啊:
f.m:29:34: error: sending 'CGPoint' (aka 'struct CGPoint') to parameter of incompatible type 'NSPoint' (aka 'struct _NSPoint') pobj = [NSValue valueWithPoint:p]; ^ /usr/include/GNUstep/Foundation/NSValue.h:73:39: note: passing argument to parameter 'point' here + (NSValue*) valueWithPoint: (NSPoint)point;
Wait!怎么是NSPoint!?书上不是说CGPoint结构吗?抱着试一下的心态改为前者,编译通过,运行结果如下:
NSPoint p = {.x = 100,.y = 200}; NSValue *pobj; pobj = [NSValue valueWithPoint:p]; [ary addObject:pobj]; NSLog(@"========================\n%@",ary);
2014-07-01 21:21:17.301 f[7802] ======================== (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "{x = 100; y = 200}")
哦也!F库中还有字典和集合2中类,也分为可变和不可变的.方法大同小异,这里就不一一写代码了,否则又变的一坨坨长长的了
obj-c编程10:Foundation库中类的使用(2)[字符串,数组]的更多相关文章
- 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相比就呵呵了. ...
- obj-c编程10:Foundation库中类的使用(1)[数字,字符串]
我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj ...
- 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—— 闭 ...
随机推荐
- 详解EBS接口开发之供应商导入(补充)--供应商银行账户更新
CREATE OR REPLACE PACKAGE BODY update_vendor_account IS PROCEDURE main(errbuf OUT VARCHAR2, retcode ...
- android最新更新方法
使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xm ...
- 2、Android构建本地单元测试
如果你的单元测试在Android中没有依赖或者只有简单的以来,你可以在你的本地开发环境中运行你的测试.这种测试比较高效因为它能让你避免将整个app安装到物理设备或虚拟机中执行单元测试.最后,执行单元测 ...
- SSH深度历险(五) 深入浅出-----IOC AND AOP
IOC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统(容器)来控制实现,而不是在你的类内部控制.这称为控制反转. 本人理解:就是把原本你自 ...
- 学习TensorFlow,线性回归模型
学习TensorFlow,在MNIST数据集上建立softmax回归模型并测试 一.代码 <span style="font-size:18px;">from tens ...
- 使用lrucache和diskLrucache实现照片墙
其实,在真正的项目实战当中如果仅仅是使用硬盘缓存的话,程序是有明显短板的.而如果只使用内存缓存的话,程序当然也会有很大的缺陷.因此,一个优秀的程序必然会将内存缓存和硬盘缓存结合到一起使用,那么本篇文章 ...
- C++对C的函数拓展 - 默认参数
1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 void myPrint(int x = 3) { printf("x:%d& ...
- 【Android 应用开发】 Android 相关代码规范 更新中 ...
. 简介 : Android 常用的代码结构, 包括包的规范, 测试用例规范, 数据库模块常用编写规范; 参考 : 之前写的一篇博客 [Android 应用开发] Application 使用分析 ; ...
- Mybatis执行ReuseExecutor(五)
ReuseExecutor顾名思义就是重复使用执行,其定义了一个Map<String, Statement>,将执行的sql作为key,将执行的Statement作为value保存,这样执 ...
- 【Unity技巧】开发技巧(技巧篇)
写在前面 和备忘录篇一样,这篇文章旨在总结Unity开发中的一些设计技巧,当然这里只是我通过所见所闻总结的东西,如果有不对之处欢迎指出. 技巧1:把全局常量放到一个单独的脚本中 很多时候我们需要一些常 ...