我正在与一个无限制的消费者一起解决生产者 - 消费者问题.生产者可以将任意数量的任务放入处理队列中.当队列为空时,使用者将阻止该线程.
while true {
do {
guard let job = try self.queue.dequeue() else { return }
job.perform()
} catch {
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,我会将循环中的所有内容放在自动释放池中,但是,它在Linux上不可用.似乎ARC永远不会释放循环中的对象.我该如何控制内存使用?
我使用Java 8时遇到问题
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
我得到错误
Execution failed for task ':app:transformClassesWithDesugarForDebug'. >
com.android.build.api.transform.TransformException:
java.lang.RuntimeException: java.lang.RuntimeException:
com.android.ide.common.process.ProcessException: Error while executing java
process with main class
Run Code Online (Sandbox Code Playgroud) 我有两个类都符合MKAnnotation,我想知道,MapKit当用户缩小并显示所有注释时,有没有办法强制不聚集注释?
UITableView使用故事板和 tableView 方法创建多个自定义单元格的当前最佳方法是什么?
现在,我正确地将我的JSON响应分为 3 个数组,然后我想用它来用 3 个不同的自定义单元格更新我的 tableView。
class MainViewController: UIViewController {
// MARK: - Properties
var starters = [Starter]()
var dishes = [Dish]()
var deserts = [Desert]()
// MARK: - Outlets
@IBOutlet weak var foodTableView: UITableView!
// MARK: - Functions
func updatDisplay() {
ApiHelper.getFoods { starters, dishes, deserts in
self.starters = starters
self.dishes = dishes
self.deserts = deserts
self.foodTableView.reloadData()
}
}
// MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
updatDisplay()
}
}
extension …Run Code Online (Sandbox Code Playgroud) 在某些情况下,错误作为参数提供而不是抛出。一个示例可以是所Result<T, Error>提供的完成处理程序。我想匹配错误而不抛出它。
通过抛出错误匹配的示例:
enum MyError: Error {
case error
}
func process(error: Error) {
do {
throw error
} catch MyError.error {
print("this is it")
} catch {
print("unknown error")
}
}
process(error: MyError.error)
Run Code Online (Sandbox Code Playgroud)
更新:
即使对于系统提供的错误(例如URLError不是enum类型的错误),匹配也应该有效。
func process(error: Error) {
do {
throw error
} catch URLError.timedOut {
print("this is not it")
} catch URLError.cancelled {
print("this is it")
} catch {
print("unknown error")
}
}
process(error: URLError(.cancelled))
Run Code Online (Sandbox Code Playgroud) 我是一个完整的可可新手。
现在,我的简单 Hello World 应用程序在[NsApp run]从 main()调用后阻塞。
我所需要的只是创建一个窗口而不是阻塞 main()。
我希望我的应用程序表现得像 glfw:
https://github.com/glfw/glfw/blob/master/src/cocoa_window.m#L1022
出于某种原因,它不会在那里阻塞。实际上,您可以删除此行,它仍然可以工作。
我一直在玩 glfw 源来弄清楚它们的不同之处。例如,[NsApp run]如果我删除,则会阻止[NSApp setDelegate:_glfw.ns.delegate];
但不是这样。
根据苹果文档:
NSApplication 类在初始化期间和事件循环内部——特别是在其初始化(或共享)和 run() 方法中设置 @autorelease 块。
通常,应用程序在事件循环运行时或通过从 nib 文件加载对象来创建对象,因此缺乏访问权限通常不是问题。但是,如果您确实需要在 main() 函数本身中使用 Cocoa 类(除了加载 nib 文件或实例化 NSApplication),您应该创建一个 @autorelease 块来包含使用这些类的代码。
我想这就是我需要的,但我不知道如何使用 @autorelease 块。
谢谢你的帮助。
swift ×4
android ×1
cocoa ×1
ios ×1
java ×1
json ×1
linux ×1
macos ×1
mapkit ×1
mkannotation ×1
objective-c ×1
uitableview ×1