Swift变量是原子的吗?

在Objective-C中,您可以区分原子性质和非原子性质:

@property (nonatomic, span) NSObject *nonatomicObject;

@property (atomic, span) NSObject *atomicObject;

根据我的理解,您可以安全地从多个线程读取和写入定义为原子的属性,而同时从多个线程中写入和访问非原子属性或ivars可能导致不确定的行为,包括严重的访问错误。

因此,如果您在Swift中有这样的变量:

var object: NSObject

我可以安全地并行读写该变量吗?(不考虑这样做的实际含义)。

回答:

假设尚无底层文档,这还为时尚早,但是您可以从汇编中学习。料斗拆卸器是一个很棒的工具。

@interface ObjectiveCar : NSObject

@property (nonatomic, span) id engine;

@property (atomic, span) id driver;

@end

在非原子和原子上分别使用objc_storeStrongobjc_setProperty_atomic,其中

class SwiftCar {

var engine : AnyObject?

init() {

}

}

使用swift_retainlibswift_stdlib_core并且显然没有内置线程安全性。

我们可以推测,@lazy稍后可能会引入其他关键字(类似于)。

:根据有关单例快速环境的此

,可以使某些情况下线程对您安全,即:

class Car {

static let sharedCar: Car = Car() // will be called inside of dispatch_once

}

private let sharedCar: Car2 = Car2() // same here

class Car2 {

}

:关注快速发展的建议https://github.com/apple/swift-

evolution/blob/master/proposals/0030-property-behavior-

decls.md-看起来像是@atomic自己实现行为成为可能。

以上是 Swift变量是原子的吗? 的全部内容, 来源链接: utcz.com/qa/420720.html

回到顶部