问题标签 [retain-cycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
667 浏览

ios - AFNetworking 成功块中的保留周期

通常,当在块中使用强引用(保留循环)时,Xcode 会显示警告。但是,我不明白为什么它没有在这个AFNetworking例子中显示出来。

这里有保留周期吗?

0 投票
1 回答
124 浏览

ios - 使用 ARC 和块时保留循环

据我了解,当对象方法接收块作为完成参数时,我可以在块中发送“self”:

但是如果这个对象“保留”了这个块(保存它以备将来使用)我应该发送一个我自己的“弱”副本:

但我也看到了变体,例如:

我不清楚为什么/何时做最后一个变种

0 投票
2 回答
524 浏览

objective-c - iOS - 使用 CoreData 的 dispatch_async 保留周期

我是 dispatch_queue 的新手,尝试在后台保存到 CoreData 时遇到了问题。我已阅读 CoreData 编程指南,并且NSManagedObjectContext在后台线程中创建了一个单独的。当我在测试项目中执行一个简单的循环来创建NSManagedObjects 时,我没有任何问题,创建了对象并使用 将NSManageObjectContextDidSaveNotification更改传达给主线程。

我相信我的问题在于我对 GCD 的无知。我正在解析 XML,parserDidEndDocument:我需要在不阻塞 UI 的情况下将数据保存到 CoreData。每当使用这个块时,我的应用程序内存开始不受控制地滚雪球,直到最后我得到Terminated app due to memory pressure.

注意:我使用 AppDelegate 的单例来保存我的NSPersistentStoreCoordinator东西,而 stuffToSave 是NSMutablearray由我的解析器创建的。

任何方向将不胜感激。这两天我一直在打我的头!

编辑1: 我正在NSManageObjectContextDidSaveNotification从与我正在解析的地方不同的班级收听。在viewDidLoad我有:

然后我使用 Apple 的“ThreadedCoreData”示例中的以下内容。

0 投票
2 回答
939 浏览

ios - iOS ARC 块保留周期

有人可以确认下面的块是否正在变成保留周期吗?请注意,该块是由 SampleClass2 而不是 SampleClass1 调用的。

0 投票
2 回答
428 浏览

delegates - 为什么代表应该是 unsafe_unretained 并且不弱?

我将 ARC 添加到我正在开发的应用程序中。不幸的是,它崩溃了。我发现将所有应用程序更新到 ARC 的自动脚本为所有 id<protocolName> 类型提供了 __unsafe_unretained 限定符。

  1. 为什么不是弱类型?我已将该应用程序及其所有子项目部署到 iOS 5,因此我的限定符确实很弱。

  2. 我的主要问题是,如果我将这些代表声明为强,我将有一个保留周期。如果我不这样做,下次我打电话给他们时,他们将成为僵尸。我检查并在我的应用程序崩溃之前,代表是 NSZombie。

这次崩溃的原因是什么,如何预防?

0 投票
4 回答
10699 浏览

ios - 在从 UIViewController 调用的非保留完成中引用 self 时,weakSelf/strongSelf 舞蹈真的有必要吗?

假设我在子类中有以下方法UIViewController

我知道self对块内部的引用导致UIViewController实例被块保留。只要performAsyncNetworkCallWithCompletion不将块存储在 my 上的属性(或 ivar)中NetworkService,我认为没有保留周期是否正确?

我意识到上面的这个结构会导致 UIViewController 被保留直到performAsyncNetworkCallWithCompletion完成,即使它被系统提前释放。但它有可能(甚至可能吗?)系统会完全取消分配 my (UIViewController iOS 6 管理 aUIViewController的后备CALayer内存的方式发生变化之后)?

如果有理由我必须做“weakSelf/strongSelf dance”,它看起来像这样:

但我觉得这非常丑陋,如果没有必要,我想避免它。

0 投票
2 回答
372 浏览

ios - 如何在合并更改时打破 Core Data 多线程保留周期?

在我的应用程序中,我使用 CoreData 来存储和使用 NSFetchedResultsController 显示数据。

我按照 raywenderlich 的教程完成了它,它有很多代码 - 但它通常可以正常工作 - 将在需要时发布其中的一部分。我坚持一个我无法理解的问题。

与 NSFetchedResultsController 结合的 UITableView 中显示的数据可以在后台更新 - 这就是我的问题开始的地方。

我正在使用 Pull-to-refresh 方法并在单独的线程上在后台开始下载。它使用为该线程创建的自己的 NSManagedObjectContext 并在创建所有对象后保存它。

这是代码:

根据我在 Apple 文档中阅读的内容,在主线程 NSManagedObjectContext 上检测这些更改的正确方法是:

基本上,当我收到有关任何 managedObjectContext 更改的通知时,我会将更改合并到主线程上下文。它通常可以工作,但是在我开始分析之后,我发现合并到所描述进程中的所有对象都不会被释放。

当我在主线程上做所有事情时——它可以工作——当我滚动 UITableView 时,它们会按预期被释放。

我找到了一种解决方法,我正在打电话:

合并完成后:

但我不知道为什么我必须这样做,以及这是否会破坏其他东西。也许有一种更好的方法可以在后台刷新数据,而我完全走错了路。

0 投票
1 回答
960 浏览

ios - Objective-C 如何检查哪些对象正在引用我的对象(保留周期)

在代码的某个部分 - 我期望一个对象被释放,但事实并非如此。

鉴于该对象 - 我如何检查哪些对象正在引用它?

另外 - 每次对象引用计数上升时是否可以知道?(以及由哪个对象)

0 投票
2 回答
1226 浏览

ios - 在调用另一个引用 self 的方法的块内调用方法是否会导致保留周期?

doFirst会在这里造成一个保留周期吗?

0 投票
2 回答
1957 浏览

ios - 为什么 UINavigationController 和 UIViewControllers 之间没有保留循环

情况:有推送 UIViewController 的 UINavigationController。

1.UIViewController强引用UINavigationController

2.UINavigationController 将视图控制器存储在 NSArray 中

UINavigationController 应该对此 NSArray 有强引用(否则将被释放)。

3.NSArray 对包含的视图控制器有很强的引用。

更新:让我们想象一下我们在代码中的某个地方:

我的问题是为什么我们这里没有保留循环?