我有一个项目,在框架中,有scala> import java.io.ByteArrayInputStream
import java.io.ByteArrayInputStream
scala> import scala.sys.process._
import scala.sys.process._
scala> val cmd = List("cat")
cmd: List[java.lang.String] = List(cat)
scala> val inputString = "hello\nworld"
inputString: java.lang.String =
hello
world
scala> val inputStream = new ByteArrayInputStream(inputString.getBytes("UTF-8"))
inputStream: java.io.ByteArrayInputStream = java.io.ByteArrayInputStream@28d101f3
scala> val outputStream: Stream[String] = (cmd #< inputStream).lineStream_!
outputStream: Stream[String] = Stream(hello, ?)
scala> println(outputStream.mkString("\n"))
hello
world
,*.framework
,*.dylib
个库。
我想知道它们是什么?以及它们之间的区别。
答案 0 :(得分:4)
首先,库是为一个或多个体系结构编译的资源和代码本身的集合。
静态库(* .a):
对于
static libraries (*.a)
,应用使用的代码为 在静态链接器复制到生成的可执行文件的过程中 编译时间。
动态库(* .dylib):
Dynamic libraries (*.dylib)
与静态库中的 感觉它们在运行时与应用程序的可执行文件相关联,但是 没有复制到它。结果,可执行文件较小,并且 因为仅在需要时才加载代码,所以启动时间为 通常更快。
对于框架,我们首先需要了解bundle概念(作为 框架是捆绑的一种特定类型)。捆绑包是一个文件 包含子目录的目录。在iOS上,捆绑包可用于 方便地将相关文件打包在一起打包-用于 实例,图像,笔尖或编译后的代码。系统将其视为一个 文件,您可以在不知道其内部的情况下访问捆绑软件资源 结构。
该库可能还具有其他资源:标题,本地化 文件,图像,文档和使用示例。我们可以捆绑所有 捆绑在一起,这就是框架。
静态框架包含一个与其一起打包的静态库 资源。动态框架包含动态库及其 资源。除此之外,动态框架还可以方便地 在同一个动态库中包含不同版本 框架!
感谢接受我的回答!
针对一种或多种体系结构进行了编译?
每种架构都需要不同的二进制文件,并且在构建 无论您身在何处,应用程序Xcode都能构建正确的架构 目前正在使用。例如,如果您要求它在 模拟器,那么它只会构建i386版本(或x86_64 64位)。
这意味着构建速度要尽可能快。当您存档 应用程序或在发布模式下构建,则Xcode将为所有三个ARM构建 架构,因此允许该应用在大多数设备上运行。什么 关于其他版本?
自然,在构建框架时,您希望开发人员成为 能够将其用于所有可能的架构,对吗?当然可以 因为那将意味着您可以赢得您的尊重和钦佩 同行。
因此,您需要为所有五种体系结构构建Xcode。 此过程将创建一个所谓的胖二进制文件,其中包含一个切片 每种架构。
arm7: Used in the oldest iOS 7-supporting devices
arm7s: As used in iPhone 5 and 5C
arm64: For the 64-bit ARM processor in iPhone 5S
i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator