- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在更新我们的应用程序以支持 64 位。当应用程序仍然是 32 位时,我们通过 archivedDataWithRootObject:
在用户默认值和文件系统中保留了一些数据。
在 64 位应用程序上对这个 32 位数据执行 unarchiveObjectWithData:
时会不会有任何问题?
我在 64-Bit Transition Guide 中找到了 Apple 的这些评论:
- Fix alignment issues caused by changes in data type sizes.
- Ensure that memory structures that are shared between the 32-bit and 64-bit runtimes share a similar layout.
但是在查看 NSKeyedArchiver
的文档时,它说不合适的数据类型会自动强制转换。
最佳答案
通常不会,使用在 64 位和 32 位之间切换的存档器时应该没有问题。如果存在,那么从您的角度来看,这是一个无法解决的重大问题,因为应该更改存档系统。
可能出现问题的地方是诸如 NSInteger 和 CGFloat 之类的基元,它们在这两种情况下具有不同的大小(很可能出于某些非常非常愚蠢的原因) 。据我所知,归档器应该在数据中添加基元的大小。然后,解档器可以解释实际的原语并执行正确的分配,如果需要的话将进行类型转换。
您可以通过创建一个小型应用程序来轻松测试所有这些,该应用程序执行存档和取消存档并将存档数据保存到计算机上的某个文件中。这样您就可以使用模拟器来测试它是否按预期工作。
这些评论应该与此无关,当执行诸如复制缓冲区之类的操作时,这些问题会成为问题:
NSInteger floatCount = 100; // number of floats in the buffer
CGFloat *buffer1; // has the data
CGFloat *buffer2; // will be copied to
size_t bufferSize = 4*floatCount; // Not safe as we assume a CGFloat has is 32-bit
size_t bufferSize = 4*sizeof(CGFloat); // Safe
buffer2 = malloc(bufferSize);
memcpy(buffer2, buffer1, bufferSize);
如果您使用 NSData 或原始数据本身使用 Apple 定义的原语将一些原始数据写入某个文件,那么您根本无法知道其中的内容,那么就会出现问题缓冲区,你有一个很大的问题。因此,如果您曾经这样做过,则永远不应该使用这些基元定义,而应该创建自己的基元定义或使用纯 C
基元。
关于ios - archivedDataWithRootObject : on 32 bit app, unarchiveObjectWithData:在 64 位应用程序上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27442611/
我已经查看了整个 Stack Overflow,但我找不到答案。 这是我的代码: NSDictionary *dic = (NSDictionary *)[NSKeyedArchiver unarch
我有一个使用 NSCoder/NSKeyedArchiver 和 NSKeyedUnarchiver 进行序列化和反序列化的类。我有单元测试,旨在检查我对序列化格式(不是简单的存档,而是包含存档)中的
我正在尝试取消存档特定类型的对象数组,但 initWithCoder: 函数没有在对象的类中执行。相反,我得到了错误: *** Terminating app due to uncaught exce
var objects: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(data) 如何将对象变成 NSMutableArray ?我存
设置赏金后我找到了答案。如果有人对我的方法有一些有用的评论(我不知道这是否是“正确”的解决方案),他/她可以获得赏金。如果您要对我的问题投反对票,请发表评论,以便我改进 future 的问题。 我目前
我有以下代码: @try { NSSet *set = [NSKeyedUnarchiver unarchiveObjectWithData:mData]; } @catch (NSExcep
我的应用目前使用这个已弃用的函数: id unarchivedObject=[NSKeyedUnarchiver unarchiveObjectWithData:codedData]; if([una
我们正在更新我们的应用程序以支持 64 位。当应用程序仍然是 32 位时,我们通过 archivedDataWithRootObject: 在用户默认值和文件系统中保留了一些数据。 在 64 位应用程
这个问题在这里已经有了答案: How to save list of object in user Default? (6 个答案) 已关闭 3 年前。 我已经构建了一个包含一些模型类的 swift
我是一名优秀的程序员,十分优秀!