- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Apple 的 Swift Programming Language Guide除了 weak
和 之外,还提到了捕获说明符
。 unowned(safe)
和 unowned(unsafe)
无主
我(认为我)理解 weak
和 unowned
之间的区别;但是 unowned(safe)
和 unowned(unsafe)
有什么区别?指南没有说。
请:不要依赖于简单地声明一个 Objective-C 等价物。
最佳答案
据我了解,虽然我无法从 Apple 找到明确的来源,但 unowned
可以分为两种类型,safe
和 unsafe
.
裸unowned
是unowned(safe)
:它是一个特殊包装的引用,当引用已释放的实例时会抛出异常。
特殊情况是 unowned(unsafe)
:它是 Objective C 的 @property (assign)
或 __unsafe_unretained
的 Swift 等价物。它不应该在 Swift 程序中使用,因为它的目的是桥接到用 Objective C 编写的代码。
因此,在查看 Cocoa 类的导入包装器时,您会看到 unowned(unsafe)
,但除非必须,否则不要使用它,您会知道何时必须使用它。
更新
__unsafe_unretained
是一个简单的指针。它不知道所指向的实例何时被释放,因此当它被取消引用时,底层内存可能是垃圾。
如果您在使用已释放的 __unsafe_unretained
变量时遇到缺陷,您将看到不稳定的行为。有时该内存位置足够好,因此代码可以运行,有时它会被部分覆盖,因此您会遇到非常奇怪的崩溃,有时该内存位置将包含一个新对象,因此您会遇到无法识别的选择器异常。
Transitioning to ARC Release Notes
__unsafe_unretained
specifies a reference that does not keep the referenced object alive and is not set to nil when there are no strong references to the object. If the object it references is deallocated, the pointer is left dangling.
关于memory-management - 'unowned(safe)' 和 'unowned(unsafe)' 之间的 Swift 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26553924/
有什么方法可以检查 unowned(safe) Swift 引用的“可用性”?所以,我在这个例子中寻找一个像 isReferenceAccessible 这样的假设函数: func someMetho
Apple 的 Swift Programming Language Guide除了 weak 和 之外,还提到了捕获说明符 unowned(safe) 和 unowned(unsafe)无主。 我(
在下面的代码中,如果Swift数组是按值传递的,是否必须要有unowned? Category 有一个 Swift 数组的属性,而不是一个 Item,所以 unowned 不是必需的,对吧? fina
基本上我有以下 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITa
我对 swift 中的这个主题感到困惑,据说无主引用必须始终有一个值并且不能是可选的,也意味着它们不能设置为“nil”....好吧,我刚刚看到了一个程序苹果的 Swift 文档表明,实例“A”具有对实
在 Swift 中存在递归内存泄漏问题,其中一个单例在另一个单例的闭包内被调用。 NetworkManager.sharedInstance.doThingWithCompletion(urlStri
以下模式在 iOS 应用中经常发生: class MyViewController: UIViewController { let myModel = MyModel() overri
我正在尝试创建一个闭包来清除我的缓存,这两个都是实例变量。当我尝试调用 [unowned self] 时,出现错误“‘unowned may only be applied to class and
关于 ARC 的教程很多。但我不理解 unowned 或 weak 的明确工作原理,因为引用捕获的变量如何变为 null。 苹果文档: Define a capture in a closure as
我正在尝试集成 Face/Touch ID 登录,我在 Apple 的文档中看到了 [unowned self],在一个闭包内。那是什么,有什么好处? 示例代码: let context = LACo
所以我一直在做一些关于 UIViewPropertyAnimator 的阅读,在我一直在看的例子中,他们做了这样的事情: animator = UIViewPropertyAnimator(durat
这个问题在这里已经有了答案: What is the difference between a weak reference and an unowned reference? (7 个答案) 关闭
我在一个闭包中有一个闭包,第二个闭包使用 self,所以两者都应该有 unowned self 还是只有第二个闭包应该有它? dispatch_async(backgroundQueue) { [un
我有一个保留循环,所以我的 viewcontroller 的 deinit 不会被调用,我试图通过添加 [unowned self] 来解决这个问题,但我不太确定在我的案例中将 unowned 放在哪
WWDC 2014 第 403 场 session Intermediate Swift和 transcript ,有以下幻灯片 演讲者说,在这种情况下,如果我们不使用[unowned self],就
我遇到了这段我不理解的 Swift 代码。分配给 navigationCallback 的是什么?什么是 [unowned self]?如果我能看到 Objective-C 中的等效示例,我想我会更好
对于我添加了 deinitializers 的 swift 编程指南中的以下代码,无论是否使用 unowned 关键字,生成的调试打印输出都是相同的。 swift 编程指南说,当引用彼此类实例的两个属
我有一个带有完成处理程序的函数,返回一个或多个参数。 在客户端中,当执行完成处理程序时,我希望有一个 unowned 对 self 的引用,以及对传递的参数的访问权。 这是说明问题和我要实现的目标的
每当我执行异步网络请求时,可能是在请求到达时 self 已经为 nil(例如,ViewController 已经被关闭)。 为了防止这种情况,我通常将自己描述为软弱的: future.onSu
我正在尝试编写一个简单的闭包作为完成处理程序,并在闭包内设置文本框的文本值: class ViewController: UIViewController { @IBOutlet var te
我是一名优秀的程序员,十分优秀!