- 浏览: 662618 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lizaochengwen:
网络请求碰到的中文乱码使用encodeURL吧- (NSStr ...
iPhone开发/iPad开发 中文乱码问题 -
hhb19900618:
还是没弄懂怎么解决了中文乱码? 正确代码能重写贴出吗
iPhone开发/iPad开发 中文乱码问题 -
zhengjj_2009:
我的理解是讲ipa文件解压缩之后再重新打包,已经破坏了签名,所 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
zhengjj_2009:
我参考你的“ 从ipa格式的母包生成其它渠道包的shell脚本 ...
xcodebuild和xcrun实现自动打包iOS应用程序 -
同一片天空:
问题果然解决了
iOS 搭建 XMPP实现环境
引用
iPhone开发应用中的Archiving NSCoder是本文要介绍的内容,举例我们创建保存一个nib文件,Interface Builder把对象写入到nib文件就是这样的arching过程,来看内容。
iPhone开发应用之Archiving NSCoder教程是本文要介绍的内容,一个面向对象程序在运行的时候,一般都创建了一个复杂的对象关系图,经常需要把这样一个复杂的对象关系图表示成字节流.这样的过程我们叫做Archiving 如图10.1,
这个字节流可以在网络中传送,也可以写入到文件中. 例如,我们创建保存一个nib文件,Interface Builder把对象写入到nib文件就是这样的arching过程(对于Java,这个过程叫serialization)。
而当从字节流中重新恢复对象关系图的过程叫做unarchive. 例如,当程序启动是,将会从nib文件中unarchive对象虽然对象包含成员变量和方法.但是只有成员变量和类名会被archive. 换句话说,data会被archive,而code不会. 所以,如果程序A archive对象,而程序B unarchive对象.那么程序A和B都要保证包含了class所连接的code. 举个例子,在nib文件中,你使用到了Appkit framework 的NSWindow和NSButton对象.那么如果我们的程序没有连接Appkit framework,那么我们就没有办法生成NSWindow和NSButton对象,因为archive中只包含了data,而没有code
有一个洗发水的广告是这样说得:"我告诉了我的两个朋友,而他们各自又告诉了自己的两个朋友,这样一传十,十传百.."寓意就是,你告诉了你的朋友,最后所有的人都开始使用这个洗发水了. 对象archiving的工作方式和这差不多. 你archiving一个root对象. 它archiving自己相关联的对象,那些相关联的对象也会archiving自己相关联的对象,依次类推,所有相关的对象都被archiving了
archiving由2步来完成. 1,我们需要告知我们的对象要怎么样来archive. 2. 我们需要激发archiving动作发生
Objective-C语言有一个机制叫protocol, 就像java中的interface一样. 一个protocol声明了一系列方法.但你的类实现一个protocol,那么就预定了,你的类需要实现protocol中声明的所有方法
NSCoder 和NSCoding
NSCoding是一个protocol. 如果你的类实现了NSCoding.那么就要实现这些方法
- (id)initWithCoder:(NSCoder *)coder;
- (void)encodeWithCoder:(NSCoder *)coder;
NSCoder是archivie 字节流的抽象类.我们可以实现把数据写入一个coder,也可以从coder中读取我们写入的数据. 我们对象的方法initWithCoder:就是从一个coder从读取数据,然后把数据赋给成员变量. 方法encodeWithCoder: 则是把成员变量的值写入到coder中. 在这一章中,我们会在Person类中实现这两个方法
NSCoder是一个抽象类,我们不会直接使用它来创建对象. 相反,我们会使用从它继承来的子类. 也就是我们使用 NSKeyedUnarchiver类来从字节流中读取数据,而使用NSKeyedArchiver类来把对象写入到字节流
Encoding
NSCoder包含了很多方法, 不过大部分人会发现只会使用到其中很少的一部分. 下面是当要archivie数据时用到的一些常用方法
- (void)encodeObject:(id)anObject forKey:(NSString *)aKey
这个方法把anObject对象写入到coder中,并把它和aKey关联起来[下次使用aKey从coder中可以再把anObject读取出来] 这会是anObject的方法encodeWithCodr得到调用(还记得上面那个洗发水广告把.就是这样传下去的)
对于C的基本类型(如int float).NSCoder使用下面方法
- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key
- (void)encodeDouble:(double)realv forKey:(NSString *)key
- (void)encodeFloat:(float)realv forKey:(NSString *)key
- (void)encodeInt:(int)intv forKey:(NSString *)key
添加encoing方法到Person类中.
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:personName forKey:@"personName"];
[coder encodeFloat:expectedRaise forKey:@"expectedRaise"];
}
这里调用了父类的encodeWithCoder,使得父类有机会把自己的变量写入到coder中. 因此,类继承树中的类只会把自己的成员变量写入到coder-不会包含父类的成员变量
Decoding
从coder中decoding数据,我们使用这些方法
- (id)decodeObjectForKey:(NSString *)aKey
- (BOOL)decodeBoolForKey:(NSString *)key
- (double)decodeDoubleForKey:(NSString *)key
- (float)decodeFloatForKey:(NSString *)key
- (int)decodeIntForKey:(NSString *)key
如果因为某些原因, 字节流中没有和aKey关联的数据,那么我们会得到0值. 例如,对象没有把key foo 关联一个float数据写入coder,那么在使用foo key来读取这个float数据,coder会返回0.0 . 如果key foo关联的是一个对象数据[使用方法encodeWithCoder 写入],那么读取时coder返回nil
添加decoding到Person类中
- (id)initWithCoder:(NSCoder *)coder
{
[super init];
personName = [[coder decodeObjectForKey:@"personName"] retain];
expectedRaise = [coder decodeFloatForKey:@"expectedRaise"];
return self;
}
我们没有调用父类的initWithCoder, 那是因为NSObject没有实现它. 如过Person类的父类实现了NSCoding协议,那么这个方法应该这样写
- (id)initWithCoder:(NSCoder *)coder
{
[super initWithCoder:coder];
personName = [[coder decodeObjectForKey:@"personName"] retain];
expectedRaise = [coder decodeFloatForKey:@"expectedRaise"];
return self;
}
你可以会说"在第3章中, designated initializer会完成所有的init工作然后在调用父类的 designated initializer, 也就是说类的其他initializer 方法都会调用designated initializer,Person类有designated initializer- init. 可以这个新加入的initializer方法并没有调用init方法阿?" 不错, 你是对的, initWithCoer: 是这个规则的一个特例.
好了.我们实现了NSCoding协议的方法.现在让Person类实现NSCoding protocol. 我们来编辑Person.h文件.
@interface Person : NSObject <NSCoding> {
现在编译我们的工程. 你也可以运行程序看看.虽然Person类可以encode自己了.不过我们没有地方让它这么做.所以程序看上去没什么变化.
原文地址:http://mobile.51cto.com/iphone-282203.htm
发表评论
-
SOCK_STREAM和SOCK_DGRAM
2015-07-23 20:08 1655sock_stream 是有保障的(即能保证数据正确传送到 ... -
SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别
2015-07-23 19:49 2062今天写程序时候,服务器端启动了,然后客户端总是连接不上,con ... -
htons()
2015-07-23 19:26 589在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺 ... -
使用symbolicatecrash分析crash文件
2015-03-10 11:32 1189原文 http://www.cnblogs.com/ning ... -
程序设计中的计算复用(Computational Reuse)
2015-02-10 10:18 672从斐波那契数列说起 ... -
didReceiveMemoryWarning
2015-02-09 16:11 548IPhone下每个app可用的内存是被限制的,如果一个app使 ... -
iOS开发中怎么响应内存警告
2015-02-09 16:08 659好的应用应该在系统内存警告情况下释放一些可以重新创建的资源。在 ... -
ASIHTTPRequest多次重复请求的问题
2014-12-17 14:34 648在一个车票订购的项目中,点击一次订购,却生成了2次订单,通过抓 ... -
从 CloudKit 看 BaaS 服务的趋势
2014-09-26 11:51 731从 6 月份 WWDC 苹果发布 ... -
ios编程--AVCapture编程理解
2014-09-26 11:03 9430、媒体采集的几个东西。这里所需要明白的是,在这个流程中,这里 ... -
NSURLProtocol
2014-09-25 10:42 8261、http://nshipster.com/nsurlpro ... -
关于iOS8的extension插件
2014-09-25 10:41 1301关于iOS8的extension插件,有兴趣的同学可以参考一下 ... -
【转】ios app在itunesConnect里面的几种状态
2014-08-05 10:34 1155Waiting for Upload (Yellow) Ap ... -
[转]iOS Dev (45) iOS图标与切片处理工具Prepo
2014-02-07 17:02 1036iOS Dev (45) iOS图标与切片处理工具Prepo ... -
phoneGap开发IOS,JS调用IOS方法/phoneGap插件开发
2014-01-13 17:49 1248前沿 废话不说phoneGap是什么不多介绍,官方网站: h ... -
如何在IOS平台下搭建PhoneGap开发环境(PhoneGap2.5)
2014-01-13 15:23 754由于在下最近在做基于HTML5的跨平台移植,搭建环境的时候着实 ... -
xcode 4 制作静态库详解
2013-12-20 18:27 549最近在做Apple的IOS开发,有开发静态库的需求,本身IOS ... -
【翻译】ios教程-创建静态库
2013-12-20 18:19 3123作者:shede333 主页:htt ... -
封装自己的控件库:iPhone静态库的应用
2013-12-20 17:03 594由于iPhone 控件的极度匮乏和自定义组件在重用上的限制,在 ... -
iphone:使用NSFileManager取得目录下所有文件(遍历所有文件)
2013-11-18 17:56 877From:http://note.sdo.com/u/xiao ...
相关推荐
这个压缩包包含了一系列与iPhone应用开发相关的项目,通过这些项目的源代码,我们可以深入理解并实践iPhone应用开发的基础技术。 首先,我们看到“03 Button Fun”,这是关于按钮使用的教程。在iOS开发中,UIButton...
- **定义与背景**:“Cocoa”是苹果公司推出的一套用于Mac OS X和iOS应用开发的框架集合,它提供了一系列丰富的API(应用程序编程接口),使得开发者能够轻松构建高质量的应用程序。 - **学习起点**:本文档作为入门...
在iOS开发中,`NSUserDefaults` 是一个至关重要的组件,它允许开发者存储并检索轻量级的用户偏好设置或应用状态数据。本教程针对初学者,将深入探讨`NSUserDefaults`的基本用法,包括如何设置、读取值以及如何持久化...
《iPhone&iPad cocos2d游戏开发实战》这本书深入浅出地介绍了在苹果移动设备上使用cocos2d框架进行游戏开发的技术与实践。cocos2d是一个强大的、开源的游戏开发库,尤其适合初学者和有一定编程基础的开发者,用于...
NX二次开发UF_PATT_set_archiving 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士...
在服务器端应用开发中,C# 语言与Visual Studio 2015(VS2015)的组合是常用的选择,尤其对于那些需要进行二次开发的项目。C# 是一种面向对象的编程语言,由微软公司推出,设计用于.NET框架,支持多种编程范式,包括...
NX二次开发UF_PATT_is_archiving_on 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...
### SAP归档(Archiving)知识点详述 #### 一、企业数据归档简介 随着企业不断使用SAP R/3作为业务流程集成平台,大量的企业数据被存储在SAP R/3系统中。随着时间的推移,新的和更新的数据不断被录入系统,而旧...
在IT行业中,管理企业应用程序中的数据增长是一个长期而复杂的挑战。尤其是对于SAP这类广泛使用的大型业务应用程序而言,随着业务的发展和各种新的实施与升级,数据量的激增成为一个日益严重的问题。本白皮书深入...
### SAP 数据归档在零售业中的应用 #### 概述 SAP 数据归档是针对 SAP 系统中大量累积的历史数据进行管理的一种方法。随着零售业务的发展,大量的销售、采购和其他交易数据不断积累,这些数据对系统的性能会产生...
在iOS应用开发中,Swift是一种强大的编程语言,它为开发者提供了高效、安全和简洁的语法。本主题将深入探讨如何使用Swift进行iOS应用的数据存档(Archiving)实践,这是一项关键技能,尤其是在处理持久化数据时。...
数据归档在SAP R/3企业环境中是一项关键的技术应用,它涉及到系统中不再频繁使用的数据的管理和存储。这些数据虽然不再活跃使用,但对于企业的历史记录和合规性需求来说仍然非常重要。归档过程通常包括将这些数据从...
在iOS开发中,数据持久化是一项至关重要的技术,它使得应用程序的数据可以在用户关闭应用或设备重启后仍然保留。本文将通过三个具体的实例深入探讨iPhone上实现数据持久化的三种方法:属性列表、对象归档和SQLite3...
在iOS开发中,数据存储是不可或缺的一部分,它涉及到如何持久化应用程序的数据,以便在用户退出应用后仍能保留这些信息。本篇文章将深入探讨iOS应用中的两种主要存储方式:归档(Archiving)和偏好设置(Preference ...
在本教程中,我们将深入探讨如何使用Spring MVC3框架构建Web应用程序。Spring MVC是一个轻量级的、模型-视图-控制器(MVC)架构,它使得开发人员能够有效地组织和处理Web请求,同时保持良好的代码结构和可维护性。 ...
[confluence插件] better-content-archiving-for-confluence-9.2.0 [confluence插件] better-content-archiving-for-confluence-9.2.0 [confluence插件] better-content-archiving-for-confluence-9.2.0 [confluence...
标题"Dcmtk在PACS开发中的应用"暗示了本文档将深入探讨DCMTK(Digital Imaging and Communications in Medicine Toolkit)在Picture Archiving and Communication Systems(PACS)开发中的具体运用。PACS是一种用于...