问题标签 [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 - [Not A Type retain]:消息发送到已释放实例,目标 c
我正在使用渐变自定义视图并通过执行以下操作在其上添加 uilabel:
当我在模拟器中运行时,一切都按我的预期运行。但是,当我在设备上安装时,应用程序崩溃并且我得到
你有什么想法为什么我会遇到这个问题?
ios - 方块挡住了我的视线
假设我这样做:
然后 xcode 将奖励我此错误:在此块中强烈捕获 vista 可能会导致保留周期
有人建议像这样声明远景
但问题是这样的。vista 变量被分配给向下几行的属性。
这是一个非原子的强属性。
我该如何解决?我可以声明一个临时 id var 来使用它,但这似乎是一个蹩脚的解决方案。
任何想法?
ios5 - 核心数据 - 打破父上下文的保留周期
假设我们在核心数据模型中有两个实体:部门和员工。
部门与员工是一对多的关系。
我有以下 ManagedObjectContexts:
- Root:连接到 Persistent Store Coordinator
- Main:与父 Root 的上下文
当我想创建一个员工时,我执行以下操作:
- 我在主上下文中有一个部门 - 我在主上下文中
创建一个员工
- 我将部门分配给员工的部门属性
- 我保存主上下文
- 我保存根上下文
这会在 Main 上下文和 Root 上下文中创建一个保留循环。
如果我在没有子上下文的情况下执行此操作(全部在 Root 上下文中),那么我可以通过调用refreshObject:mergeChanges
Employee 来打破保留循环。在我使用这两个上下文的情况下,我仍然可以使用该方法来打破 Main 上下文的循环,但我将如何打破 Root 上下文的循环?
旁注:这是一个描述我的问题的简单示例。在 Instruments 中,我可以清楚地看到分配的数量在增长。在我的应用程序中,我的上下文比一层更深,导致了更大的问题,因为我得到了一个新的实体分配,每个上下文都有保留周期,我正在保存。
15/04 更新:NSPrivateQueueConcurrencyType 与 NSMainQueueConcurrencyType
保存两个上下文后,我可以refreshObject:mergeChanges
使用 Department 对象在 Main 上下文上执行。正如预期的那样,这将重新故障部门对象,打破保留周期并在该上下文中取消分配部门和员工实体。
下一步是打破存在于 Root 上下文中的保留循环(保存 Main 上下文已将实体传播到 Root 上下文)。我可以在这里做同样的技巧,并refreshObject:mergeChanges
在带有 Department 对象的 Root 上下文中使用。
奇怪的是:当我的根上下文是用 NSMainQueueConcurrencyType 创建的(所有分配都重新出错并解除分配)时,这工作正常,但是当我的根上下文是用 NSPrivateQueueConcurrencyType 创建时不起作用(所有分配都重新出错,但没有解除分配)。
旁注:根上下文的所有操作都在 performBlock(AndWait) 调用中完成
更新 15/04:第 2 部分
当我使用 NSPrivateQueueConcurrencyType 在根上下文上执行另一个(无用,因为没有更改)保存或回滚时,对象似乎已被释放。我不明白为什么这与 NSMainQueueConcurrencyType 的行为不同。
16/04 更新:演示项目
我创建了一个演示项目:http ://codegazer.com/code/CoreDataTest.zip
21/04 更新:到达那里
谢谢 Jody Hagings 的帮助!
我正在尝试refreshObject:mergeChanges
移出我的 ManagedObjectdidSave
方法。
您能否向我解释一下两者之间的区别:
和
顶部的不会释放对象,底部的会。
cocoa - NSOutlineView/NSTreeController 删除后没有释放所有模型对象
我有一个非常基本的应用程序:一个NSOutlineView
绑定到NSTreeController
. 大纲视图显示一个简单的模型对象 ( TCCard
)。我添加了两个按钮,以便可以在大纲视图中添加和删除模型对象。
查看 Instruments (Leaks) 中的应用程序,我可以看到我的模型对象的新实例是在我添加它们时创建的,但当我从大纲视图中删除它们时,并不是所有实例都被释放。即使大纲视图没有更多条目,我的模型对象的两个或三个实例也始终保持“活动”状态。
大纲视图或树控制器是否在幕后进行一些缓存?下面的代码:
这是一个非常基本的例子。在我的真实应用程序中,这些模型对象非常“沉重”,并有很多对其他对象的引用。我真的希望在将它们从视图中删除时将它们全部释放。
编辑:即使使用 Apple 的示例代码也可以重现此问题:https ://developer.apple.com/library/mac/#samplecode/DragNDropOutlineView/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008831
在 Instruments 中的示例中运行并搜索SimpleNodeData
. 观察实例的数量,然后从示例应用程序中删除所有节点(通过上下文菜单)。
objective-c - 故意创建保留循环(没有 GC 的目标 C)
有没有一种情况是故意创建一个保留周期来防止重新分配,然后再清理它,这是解决问题的最佳方法吗?
如果是这样,在 Cocoa Touch 或 NextStep 框架中是否有这样的例子?
我打算让这个问题专门针对带有 ARC 的 Objective C,因为带有 GC 的 Objective C 或其他带有 GC 的语言可能表现不同。
objective-c - 在块/块中使用弱自我时的 EXC_BAD_ACCESS
我一直在为这个问题苦苦挣扎,因为我认为我不完全理解保留周期。我对此完全陌生,我正在尝试更多地了解它。
我收到带有以下代码的 EXC_BAD_ACCESS 消息。
我开始使用weakSelf,因为如果我只使用self.successBLock(); 就会收到2 个关于保留周期的警告。确切的警告是:
也许我什至不应该打扰使用弱者,但我对此不太确定。
这是我在一个块中使用weakSelf的部分:
这就是我分配块属性的方式:
objective-c - 我是否在 UIViewController 和自定义对象之间创建了一个保留周期?
在使用 ARC 的项目中,我有一个UIViewController
处理太多问题的问题,所以我想把事情分开。对我来说,一件显而易见的事情是一种格式化和发送电子邮件的方法,并将其拆分为一个单独的对象。
我的控制器目前处理MFMailComposeViewControllerDelegate
协议,因为在成功发送电子邮件后,我还有一些额外的工作要做。
我的问题是,如果控制器用作发送电子邮件的单独对象,并且我给它一个指向控制器的指针以用作MFMailComposeViewController
mailComposeDelegate
,我会创建一个问题 - 特别是保留周期吗?
如果是这样,在这种情况下有什么更好的方法?将指向控制器的属性设置为弱就足够了吗?
objective-c - 对 NSTimer 目标的弱引用以防止保留循环
我正在使用NSTimer
这样的:
当然,NSTimer
保留创建保留循环的目标。此外,self
它不是 UIViewController,所以我没有任何类似的东西viewDidUnload
可以使计时器无效以打破循环。所以我想知道是否可以使用弱引用:
我听说计时器必须无效(我想从运行循环中释放它)。但是我们可以在我们的 dealloc 中做到这一点,对吧?
这是一个可行的选择吗?我见过很多人们处理这个问题的方法,但我还没有看到这个。
iphone - Apple decumentation 在块中的对象上
苹果关于此事的文档指出:
复制块时,它会创建对块内使用的对象变量的强引用。如果在方法的实现中使用块:
如果通过引用访问实例变量,则会对 self 进行强引用;
如果您按值访问实例变量,则会对该变量进行强引用。
并且有代码示例:
但对我来说这毫无意义。如何按值访问实例变量?您不是总是通过引用访问它吗?无论是它self.myVariable
还是只是id newName = self.myVariable
,它总是被引用。
那么这个例子不是太清楚他们的意思。为什么在第一种情况下是自我保留而在第二种情况下不是?它没有在任何地方使用,那么为什么要阻止捕获它呢?
ios - Capturing 'self' strongly in this block is likely to lead to a retain cycle
I have reqest with block. But the compiler issues a warning
"Capturing 'self' strongly in this block is likely to lead to a retain cycle"
I try example write like weakSelf.generalInstaImage
, but then the compiler generates an error and do not compile.