问题标签 [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.
ios - AFNetworking 成功块中的保留周期
通常,当在块中使用强引用(保留循环)时,Xcode 会显示警告。但是,我不明白为什么它没有在这个AFNetworking
例子中显示出来。
这里有保留周期吗?
ios - 使用 ARC 和块时保留循环
据我了解,当对象方法接收块作为完成参数时,我可以在块中发送“self”:
但是如果这个对象“保留”了这个块(保存它以备将来使用)我应该发送一个我自己的“弱”副本:
但我也看到了变体,例如:
我不清楚为什么/何时做最后一个变种
objective-c - iOS - 使用 CoreData 的 dispatch_async 保留周期
我是 dispatch_queue 的新手,尝试在后台保存到 CoreData 时遇到了问题。我已阅读 CoreData 编程指南,并且NSManagedObjectContext
在后台线程中创建了一个单独的。当我在测试项目中执行一个简单的循环来创建NSManagedObject
s 时,我没有任何问题,创建了对象并使用 将NSManageObjectContextDidSaveNotification
更改传达给主线程。
我相信我的问题在于我对 GCD 的无知。我正在解析 XML,parserDidEndDocument:
我需要在不阻塞 UI 的情况下将数据保存到 CoreData。每当使用这个块时,我的应用程序内存开始不受控制地滚雪球,直到最后我得到Terminated app due to memory pressure
.
注意:我使用 AppDelegate 的单例来保存我的NSPersistentStoreCoordinator
东西,而 stuffToSave 是NSMutablearray
由我的解析器创建的。
任何方向将不胜感激。这两天我一直在打我的头!
编辑1:
我正在NSManageObjectContextDidSaveNotification
从与我正在解析的地方不同的班级收听。在viewDidLoad
我有:
然后我使用 Apple 的“ThreadedCoreData”示例中的以下内容。
ios - iOS ARC 块保留周期
有人可以确认下面的块是否正在变成保留周期吗?请注意,该块是由 SampleClass2 而不是 SampleClass1 调用的。
delegates - 为什么代表应该是 unsafe_unretained 并且不弱?
我将 ARC 添加到我正在开发的应用程序中。不幸的是,它崩溃了。我发现将所有应用程序更新到 ARC 的自动脚本为所有 id<protocolName> 类型提供了 __unsafe_unretained 限定符。
为什么不是弱类型?我已将该应用程序及其所有子项目部署到 iOS 5,因此我的限定符确实很弱。
我的主要问题是,如果我将这些代表声明为强,我将有一个保留周期。如果我不这样做,下次我打电话给他们时,他们将成为僵尸。我检查并在我的应用程序崩溃之前,代表是 NSZombie。
这次崩溃的原因是什么,如何预防?
ios - 在从 UIViewController 调用的非保留完成中引用 self 时,weakSelf/strongSelf 舞蹈真的有必要吗?
假设我在子类中有以下方法UIViewController
:
我知道self
对块内部的引用导致UIViewController
实例被块保留。只要performAsyncNetworkCallWithCompletion
不将块存储在 my 上的属性(或 ivar)中NetworkService
,我认为没有保留周期是否正确?
我意识到上面的这个结构会导致 UIViewController 被保留直到performAsyncNetworkCallWithCompletion
完成,即使它被系统提前释放。但它有可能(甚至可能吗?)系统会完全取消分配 my (UIViewController
在iOS 6 管理 aUIViewController
的后备CALayer
内存的方式发生变化之后)?
如果有理由我必须做“weakSelf/strongSelf dance”,它看起来像这样:
但我觉得这非常丑陋,如果没有必要,我想避免它。
ios - 如何在合并更改时打破 Core Data 多线程保留周期?
在我的应用程序中,我使用 CoreData 来存储和使用 NSFetchedResultsController 显示数据。
我按照 raywenderlich 的教程完成了它,它有很多代码 - 但它通常可以正常工作 - 将在需要时发布其中的一部分。我坚持一个我无法理解的问题。
与 NSFetchedResultsController 结合的 UITableView 中显示的数据可以在后台更新 - 这就是我的问题开始的地方。
我正在使用 Pull-to-refresh 方法并在单独的线程上在后台开始下载。它使用为该线程创建的自己的 NSManagedObjectContext 并在创建所有对象后保存它。
这是代码:
根据我在 Apple 文档中阅读的内容,在主线程 NSManagedObjectContext 上检测这些更改的正确方法是:
基本上,当我收到有关任何 managedObjectContext 更改的通知时,我会将更改合并到主线程上下文。它通常可以工作,但是在我开始分析之后,我发现合并到所描述进程中的所有对象都不会被释放。
当我在主线程上做所有事情时——它可以工作——当我滚动 UITableView 时,它们会按预期被释放。
我找到了一种解决方法,我正在打电话:
合并完成后:
但我不知道为什么我必须这样做,以及这是否会破坏其他东西。也许有一种更好的方法可以在后台刷新数据,而我完全走错了路。
ios - Objective-C 如何检查哪些对象正在引用我的对象(保留周期)
在代码的某个部分 - 我期望一个对象被释放,但事实并非如此。
鉴于该对象 - 我如何检查哪些对象正在引用它?
另外 - 每次对象引用计数上升时是否可以知道?(以及由哪个对象)
ios - 在调用另一个引用 self 的方法的块内调用方法是否会导致保留周期?
doFirst
会在这里造成一个保留周期吗?
ios - 为什么 UINavigationController 和 UIViewControllers 之间没有保留循环
情况:有推送 UIViewController 的 UINavigationController。
1.UIViewController强引用UINavigationController
2.UINavigationController 将视图控制器存储在 NSArray 中
UINavigationController 应该对此 NSArray 有强引用(否则将被释放)。
3.NSArray 对包含的视图控制器有很强的引用。
更新:让我们想象一下我们在代码中的某个地方:
我的问题是为什么我们这里没有保留循环?