问题标签 [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 - 在 dispatch_async 函数中使用弱自身
我阅读了很多关于使用__weak self
inside的帖子dispatch_async
,现在我有点困惑。
如果我有 :
我需要使用__weak self
. 因为我读到在某些情况下dispatch_async
不需要__weak self
.
ios - ARC,自我和块
我以为我理解 self 在复制的块中的用法是no no。
但是为了清理我的代码,我在 Xcode 中启用了一堆警告,一个叫做“向弱指针发送消息”
所以现在在我所有的块中,每次我使用我创建的weakself
参考__weak typeof(self) weakself = self;
我收到这个警告:Weak receiver may be unpredictably set to nil
一个简单的例子:
我已经看到了在块中定义 self 版本的答案,如下所示:
所以我想知道这里实际发生了什么:
- 我只是在欺骗编译器吗?
- 强引用对弱引用有什么作用?
- 我还缺少什么。
谢谢。
cocoa-touch - 保留周期有时可以吗?
假设我有一个对象应该在应用程序的整个生命周期中作为单例存在。这个对象是否可以包含一个强引用,例如,将NSTimer
自身作为计时器的目标?这将是一个保留周期,但我没有看到任何不利之处。dealloc
当操作系统尝试释放内存时,无论如何都不需要调用。
objective-c - 向 self 添加 KVO 观察者会导致内存泄漏吗?
在 nsobject 中,您有一个要观察自身的属性“keyPath”并使用
上述行会导致保留周期吗?
我提出这个问题是因为我想知道它是否是重写一堆 setter 函数的可行替代方案。
objective-c - 了解 ARC 下带有块的微妙保留循环
我正在研究从Matt Galloway的Effective Objective-C书中获取的代码片段。片段如下(我已经修改了一点)。
正如作者所说,这种模式被不同的网络库使用,并且存在一个保留周期。保留周期对我来说非常明显,因为如果您从对象图的角度考虑,networkFetcher
实例通过completionHandler
属性(copy
ied )保留块,而块保留它,networkFetcher
因为它在中使用它NSLog
。
现在,要中断块,NetworkFetcher
必须将完成处理程序设置为完成nil
下载已请求的数据。
好的。这样就没有保留周期了。该块在运行时,它会释放其对 的引用,networkFetcher
并networkFetcher
产生nil
对块的引用。
现在,我的问题是关于片段的执行流程。以下操作顺序是否正确?
networkFetcher
运行完成处理程序- 该块被执行
- 该块释放对
networkFetcher
networkFetcher
释放对块的引用
我的怀疑取决于行动 3) 和 4) 。如果 3) 在 4) 之前执行,则没有人引用networkFetcher
,因此可以在任何执行时间释放它(ARC 将在 结束时发出释放调用downloadData
)。我错了还是我错过了什么?
希望问题很清楚。
ios - 从superview中删除后uiviewcontroller仍然保留,是保留周期问题吗
我有一个 UIViewController 子类 ABCViewController。在长按按钮时,我打开一个包含 UIViewController(AddProduct) 的 UIPopover 在 abuton 长按时。添加产品包含一个取消按钮,可将用户带回 ABCViewControl.and 在仪器分配工具中它也消失了.罚款到这一点。像这样的事情..
}
AddProduct 包含一个编辑按钮,该按钮打开一个单独的 uiviewcontroller(AddProductSeparateViewController)。它 (AddProduct) 还包含一个取消按钮。单击取消按钮时用户返回 ABCViewCintroller。
**问题:**AddProduct 是在此过程中发布,但 AddProductSeparateViewController 没有根据分配工具的活动对象和 dealloc 断点发布。
AddProduct 中打开 AddProductSeparateViewController 的代码如下:
}
这个委托基本上通知 ABCViewController 打开 AddProductSeparateViewController。
}
}
AddProductSeparateViewController 中要取消的代码如下:
}
为什么 AddProductSeparateViewController 在这个过程中没有释放。
谢谢
ios - 在weakSelf 调用的方法中引用weakSelf 会导致保留周期吗?
我想我了解如何创建简单的保留周期,但我不完全了解更复杂的情况。
这是会导致保留周期的代码。(正确的?)
为避免该保留周期,我将创建对以下内容的弱引用self
:
我希望到目前为止我是正确的。
这就是有趣的地方。我有一个计算和缓存文本高度的方法,然后在 tableView 上调用 reloadData。该方法异步执行并在完成时调用它的completionBlock(在mainThread 上)。
此代码是否会导致保留周期,因为welf
在 completionBlock 中捕获自身relayoutWithCompletion:
?我是否正确地认为因为 welf 是一个弱引用我会避免一个保留周期?
如果我更进一步呢?
一路下来还好...
ios - iOS:块和 ivars
在很多问题中,都会询问是否可以在blocks中使用self。答案是否定的,避免保留循环。
现在,当我在我的块中使用“ivar”时UIViewController
应该没问题。但是当我使用:
该dealloc
方法从未调用过:
当我删除if(_object != nil){
,该dealloc
方法被调用。
_object
在将它传递给块之前我应该对它进行弱引用吗?
ios - 为什么建议对委托使用 _weak 引用
大家好,是否有人会详细说明为什么建议对代表使用 _weak 引用而不是强引用?虽然我们也可以对委托使用强引用。有人会用更好的描述性示例以简单的方式告诉我,在哪些情况下我们应该使用强引用以及在哪些情况下我们应该为代表使用 _weak 引用。
我经历了有关堆栈溢出的相关问题之一
但它并没有正确地清除我的概念。
任何帮助将不胜感激!
谢谢。
objective-c - 在块内使用带有 self 的方法
我需要在两个块中执行相同的一堆代码(我正在使用 ARC):
在另一个地方我打电话:
然后我有我的处理程序:
用这种方式省钱吗?请注意该handleError:
方法self
在内部使用。如果不是,那么这里的正确方法是什么?顺便说一句:self 是一个 viewController,可以解除分配(doB: 和 doA: 块是基于网络的,所以可能很慢)。