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)[字符串,数组]的更多相关文章

  1. obj-c编程10:Foundation库中类的使用(6)[线程和操作队列]

    任何语言都不能避而不谈线程这个东东,虽然他是和平台相关的鸟,虽说unix哲学比较讨厌线程的说...线程不是万能灵药,但有些场合还是需要的.谈到线程就不得不考虑同步和死锁问题,见如下代码: #impor ...

  2. obj-c编程10:Foundation库中类的使用(5)[时间对象]

    隔了好久才有了这新的一篇,还是无奈的时间啊!so这次我们就着重谈谈它喽. F库中有很多时间相关的类,比如NSDate,NSTimeInterval,NSTimeZone,NSDateComponent ...

  3. obj-c编程10:Foundation库中类的使用(4)[文件管理,查询当前进程信息]

    接上一篇文件管理博文.我们可以用NSPathUtilities.h中包含的NSString函数和分类扩展来以兼容的方式处理路径.下面凡是有系统编程经验的童鞋都知道是啥意思了: #import < ...

  4. obj-c编程10:Foundation库中类的使用(3)[文件管理]

    好吧,不管神马系统都无可避免的要说到文件,目录,路径(PATH)管理的内容,下面我们来看看在F库中对他们的支持.我简单看了下,不谈其他光从方法命名来说就多少显得有点复杂,如果和ruby相比就呵呵了. ...

  5. obj-c编程10:Foundation库中类的使用(1)[数字,字符串]

    我们知道在mac或iphone上编程最终逃不开os x平台,你无法在windows或linux上开发纯正的apple程序.(so不要舍不得银子买mac啦)虽说linux和windows上有移植的obj ...

  6. C++的XML编程经验――LIBXML2库使用指南[转]

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

  7. Java 库:为 Java 程序员而生的 10 + 最佳库

    众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...

  8. C++的XML编程经验――LIBXML2库使用指南

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

  9. 并发编程 10—— 任务取消 之 关闭 ExecutorService

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

随机推荐

  1. Windows安装和使用fftw

    FFTW是一个比较快的.非常出名的一个DFT的开源库. 本文探索安装和配置FFTW,用Visual Studio 2008来使用fftw. 第一步:下载最新的fftw库 这一步很简单,只要在googl ...

  2. Linux的sleep()和usleep()

    1.sleep和usleep都是linux中的程序挂起函数.只是时间的单位不一样. 2. sleep的基本单位是s(秒),也可以用m(分).h(小时). 例: sleep 1 : 挂起1秒 sleep ...

  3. Cocos2D中Action的进阶使用技巧(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都很清楚了,其实本身act ...

  4. unity使用ugui自制调色面板

    突然想实现一个调色面板,然后开工... 首先找找有没有什么接口可调,木有找到,找到一些调用win32实现的本地颜色面板的调用,感觉不科学,反正多平台肯定是搞不定的. 既然没找到,还是老老实实的自己写吧 ...

  5. 手动开发动态资源之servlet初步

    1.1 静态资源和动态资源的区别 静态资源:当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. 1.2动态资源的开发技术 Serv ...

  6. Google Guava的5个鲜为人知的特性

    译文出处: 花名有孚   原文出处:takipi.com Google Guava有哪些比较冷门但却又实用的特性呢? 它是最流行的开源库之一,你应该听过它的大名,它诞生的地方正是人们举办真正的魁地奇比 ...

  7. UNIX环境高级编程——进程间通讯方法整理

    一.无名管道pipe #include <unistd.h> int pipe(int fd [2]) 二.fifo #include <sys/stat.h> int mkf ...

  8. (Tomcat)服务器之web应用的虚拟目录映射和主机搭建

    首先来了解一下web的虚拟目录映射和主机搭建的知识 第一:web的虚拟目录映射 首先我们要知道什么叫做web的虚拟目录映射,这个很好理解的,就是将我们本地硬盘上的web应用映射出一个供外界用户访问的地 ...

  9. JAVA DOM4j解析XML数据到自定义javabean

    我们获取xml中的数据,一般以面向对象的思想去处理这些数据.因此,我们需要自定义类来封装解析出来的数据,以方便我们操作这些数据. 自定义的java类,称为javabean. 自定义Contact类代码 ...

  10. Touch Handling in Cocos2D 3.x(六)

    使英雄变成可触碰的对象 这是另一个非常有用的特性.很多用户需要捡起已经存在的英雄然后满屏幕移动它们.让我们按以下步骤实现该功能: 如果用户触摸屏幕空白位置,一个新的英雄将被创建 如果用户触摸一个已经存 ...