我正在Swift中编写一些性能关键的代码.在实现了我能想到的所有优化,并在Instruments中分析应用程序之后,我开始意识到绝大多数CPU周期都花在了Floats数组上的执行map()和reduce()操作上.所以,只是为了看看会发生什么,我更换的所有实例map,并reduce具有良好的老式for循环.令我惊讶的是...... for循环更快,更快!
有点困惑,我决定执行一些粗略的基准测试.在一次测试中,我map在执行一些简单的算法之后返回了一个Floats数组,如下所示:
// Populate array with 1,000,000,000 random numbers
var array = [Float](count: 1_000_000_000, repeatedValue: 0)
for i in 0..<array.count {
array[i] = Float(random())
}
let start = NSDate()
// Construct a new array, with each element from the original multiplied by 5
let output = array.map({ (element) -> Float in
return element * 5
})
// Log the elapsed time
let elapsed = NSDate().timeIntervalSinceDate(start)
print(elapsed) …Run Code Online (Sandbox Code Playgroud) 在移动设备(iPhone/Android)上,通过实施WebSockets与HTTP对电池消耗的影响是什么?
假设我正在构建一个即时消息应用程序并有两个选项:
有人告诉我,维持一个持久的WebSocket连接将是一个巨大的电池耗费因为它需要天线持续活动,而不是在每次请求后断电 - 但这是真的吗?
这个答案表明,在iOS上,每个设备始终与推送通知服务保持持久连接(类似于WebSockets,我猜),那么这是不是表明设备的天线无论如何都是24/7运行?
对于即时消息应用程序来说,HTTP请求的额外开销是非常微不足道的,但是在需要不断下载大量项目的应用程序中,持久的WebSocket连接将非常有用.有关在移动设备上维护长期WebSocket连接的任何见解(特别是有关电池消耗)将非常有用!
我正在尝试将轴单位标签添加到使用 Swift Charts 构建的图表中。
例如:
import SwiftUI
import Charts
struct ContentView: View {
struct ChartData: Identifiable {
var id: Double { xVal }
let xVal: Double
let yVal: Double
}
let data: [ChartData] = [
.init(xVal: -5, yVal: 5),
.init(xVal: 0, yVal: 10),
.init(xVal: 5, yVal: 20),
]
var body: some View {
Chart(data) {
LineMark(
x: .value("Position", $0.xVal),
y: .value("Height", $0.yVal)
)
}
.chartYAxis {
AxisMarks(position: .leading)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们如何创建像上面红色所示的轴标签 - 或者以其他方式向我们的轴添加单位/描述?
为简单起见,假设我正在开发像Instagram这样的移动应用程序.用户可以从服务器下载图像,并上传自己的图像.目前,服务器将所有图像(实际上只是小缩略图)存储在MySQL数据库中作为BLOB.似乎最常见的传输图像的方法是使用Base64编码,这让我有两个选择:
显然,选项#1需要在服务器上进行更多的处理,因为必须对每个请求对图像进行编码/解码.这使我倾向于选项#2,但一些研究表明,在MySQL中存储Base64字符串的效率远低于将图像直接存储为BLOB,并且通常不鼓励使用.
我当然不是第一个遇到这种情况的人,那么有没有人就这项工作的最佳方式提出建议?
我在网上找到了许多用于在iOS中处理音频的例子,但是大多数都已经过时了,并不适用于我想要完成的任务.这是我的项目:
我需要从两个来源捕获音频样本 - 麦克风输入和存储的音频文件.我需要对这些样本执行FFT以产生整个剪辑的"指纹",以及应用一些额外的过滤器.最终目标是构建一种类似于Shazam等的歌曲识别软件.
在iOS 8中捕获单个音频样本以执行快速傅里叶变换的最佳方法是什么?我想最终会有大量的这些,但我怀疑它可能不会像那样.其次,如何使用Accelerate框架处理音频?它似乎是在iOS中对音频执行复杂分析的最有效方式.
我在网上看到的所有例子都使用旧版本的iOS和Objective-C,但我无法将它们成功转换为Swift.iOS 8是否为这类东西提供了一些新的框架?
在我的iOS应用程序中,我有一个搜索功能,可以从服务器获取结果.当用户更新其查询时,搜索更新会立即生效,因此会导致连续发出多个请求.
所以我的问题是,如何确保在这些连接上使用TCP keep-alive?我希望减少尽可能多的延迟,因此在第一个请求之后保持连接并重新用于以下请求非常重要.
我正在使用NSURLSession,我听说它默认使用keep-alive,但我怎么知道呢?在服务器上记录请求显示每个连续请求之间没有区别,但我不希望从头信息中看到任何更改.
这里有什么帮助?我在我的服务器上使用Go,因此它可能需要在该方面进行一些额外的配置.
使用Gmail API发送电子邮件时,它会在正文中设置硬行换行符,每行大约78个字符。与此类似的问题可以在这里找到。
我该如何停止?我只是想通过API发送纯文本电子邮件而没有换行符。当前的格式看起来很糟糕,尤其是在移动客户端上(在Gmail和iOS Mail应用程序上经过测试)。
我尝试了以下标题:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
我有什么想念的吗?
编辑:根据Rebot先生的建议,我也没有运气尝试过此方法:
Content-Type: mixed/alternative
编辑2:这是我发送的消息的确切格式(尝试使用和不使用quoted-printable标题:
From: Example Account <example1@example.com>
To: <example2@example.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Subject: This is a test!
Date: Tue, 18 Oct 2016 10:46:57 -GMT-07:00
Here is a long test message that will probably cause some words to wrap in strange places.
Run Code Online (Sandbox Code Playgroud)
我将收到完整的消息并对其进行Base64编码,然后/gmail/v1/users/{my_account}/drafts/send?fields=id使用以下JSON正文将其发布到:
{
"id": MSG_ID,
"message": {
"raw": BASE64_DATA
}
}
Run Code Online (Sandbox Code Playgroud) 当 SwiftUIView绑定到 时ObservableObject,当观察到的对象内发生任何更改时,视图会自动重新加载- 无论更改是否直接影响视图。
这似乎会导致非平凡应用程序出现严重的性能问题。看这个简单的例子:
// Our observed model
class User: ObservableObject {
@Published var name = "Bob"
@Published var imageResource = "IMAGE_RESOURCE"
}
// Name view
struct NameView: View {
@EnvironmentObject var user: User
var body: some View {
print("Redrawing name")
return TextField("Name", text: $user.name)
}
}
// Image view - elsewhere in the app
struct ImageView: View {
@EnvironmentObject var user: User
var body: some View {
print("Redrawing image")
return Image(user.imageResource)
} …Run Code Online (Sandbox Code Playgroud) 我的团队正在为大型组织开发一套内部应用程序,每个应用程序都需要访问相同的数据.这包括大量的用户数据和预先加载应用程序(SQLite)的大约50MB的其他数据,以及可以随时下载的大量图像和音频文件.在iOS 8中是否有任何方法允许这些应用程序访问相同的文件?像共享文档目录这样的东西是理想的.
最初这些应用程序将在企业许可证下内部发布,但客户最终会希望它们在App Store上发布.
这个问题是关于Apple在iOS 11中引入的新ARKit框架:
有没有办法在使用ARSession时配置捕获的视频质量?它似乎默认为1280x720 - 看起来非常糟糕,特别是在iPad上.我想将其改为1080p或4k.
如果这不可能,有没有办法通过提供自定义视频流来使用ARKit?
我有一个针对tvOS的小测试应用程序 - 带有两个按钮的白色背景.按钮是标准按钮UIButton,除了将标题文本和设置设置titleColor为黑色外没有自定义.
UIButton当他们变得专注时,我不会收到阴影(或任何动画).如果我用UITextFields 替换它们,它们会按预期获得默认的阴影和动画.我可以通过添加目标并在选择时打印到控制台来确认按钮是否已成为焦点.
知道发生了什么事吗?Apple的文档,本文和这个答案都表明UIButton应该像其他可聚焦元素一样自动接收默认的焦点动画.这是一个我错过的错误吗?
相关代码:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.whiteColor()
let button = UIButton()
button.setTitle("Button", forState: .Normal)
button.setTitleColor(UIColor.blackColor(), forState: .Normal)
button.frame = CGRectMake(500, 500, 300, 100)
view.addSubview(button)
let button2 = UIButton()
button2.setTitle("Button2", forState: .Normal)
button2.setTitleColor(UIColor.blackColor(), forState: .Normal)
button2.frame = CGRectMake(900, 500, 300, 100)
view.addSubview(button2)
}
Run Code Online (Sandbox Code Playgroud)
编辑:这只在UIButton以编程方式添加s 时发生- 如果我在Interface Builder中添加它们,它们正常运行.
ios ×7
swift ×4
http ×2
macos ×2
swiftui ×2
android ×1
arkit ×1
arrays ×1
audio ×1
base64 ×1
blob ×1
core-data ×1
email ×1
encoding ×1
fft ×1
gmail ×1
gmail-api ×1
go ×1
iphone ×1
json ×1
mysql ×1
nsurlsession ×1
objective-c ×1
performance ×1
sqlite ×1
tvos ×1
web-services ×1
websocket ×1
xcode9 ×1
xcode9-beta ×1