有人可以解释什么时候,什么时候不使用“弱”赋值给Swift中的委托指针,为什么? 我的理解是,如果您使用未定义为类的协议,则不能也不希望将委派指针分配给弱。 protocol MyStructProtocol{ //whatever } struct MyStruct { var delegate: MyStructProtocol? } 但是,当你的协议被定义为一个类types的协议,那么你想设置你的委托给一个弱指针? protocol MyClassProtocol:Class{ //whatever } class MyClass { weak var delegate: MyClassProtocol? } 我对么? 在苹果的快速指南中,类协议的例子并没有使用弱分配,但是在我的testing中,如果我的代表没有被弱引用,我会看到很强的参考周期。
我试图找出一种方法来使用typeof来创build一个self的弱引用在块中使用,以避免保留周期。 当我第一次读到这个时,似乎这个惯例是使用__block typeof(self) bself = self; ,编译但使用__block来避免保留周期不再工作,应该使用__weak 。 然而__weak typeof(self) bself = self; 导致错误: 'typeof(self)'(aka'TUAccountsViewController * const __strong')types已经有保留属性设置 有没有办法使用typeof或其他调用一般创build一个self弱引用?
在这里也有一个类似的问题,但是我只想澄清那些在这里没有完全解释的东西。 我明白,所有代表和出路 – 事实上任何提及“父母”的对象,都是一个好的公民,并思考对象图一分钟 – 应该把弱引用归结为零。 由于归零弱指针的性质会自动降到零,而引用对象的保留计数达到零,这是否意味着将IBOutlets设置为零,现在viewDidUnload现在是不必要的了? 所以,如果我宣布我的出路是这样的: @property (nonatomic, weak) IBOutlet UILabel *myLabel; 下列代码是否有效? – (void)viewDidUnload { self.myLabel = nil; [super viewDidUnload]; }
我怎样才能得到一个数组零引用下弱引用 ? 我不希望数组保留对象。 而且我希望数组元素可以在释放时自行删除,或者将这些条目设置为nil。 同样的,我怎样才能用字典呢? 我不希望字典保留这些值。 再次,我希望字典元素或者在值被释放时自行移除,或者将值设置为零。 (我需要保留这些唯一标识符的键,至less在取消分配相应的值之前)。 这两个问题包含了类似的理由: 对ARC下的对象的弱引用的NSArray 有一个不保留的id对象列表? 但是也不要求引用归零 。 根据文档,NSPointerArray和NSHashMap都不支持ARC下的弱引用。 NSValue的nonretainedObjectValue也不会工作,因为它是非零。 我看到的唯一的解决scheme是创build我自己的 NSValue类包装类(weak)属性, 这个答案提到,接近尾声 。 有没有更好的方法,我没有看到? 我正在开发OS X 10.7和iOS 6.0。
在Objective C中,您可以将一个属性定义为具有强或弱的引用,如下所示: @property(strong)… @property(weak)… 这是如何迅速完成的?
我读了很多关于在dispatch_async里面使用__weak self的post,现在我有点困惑了。 如果我有 : self.myQueue = dispatch_queue_create("com.biview.core_data", NULL); dispatch_async(self.myQueue, ^(void){ if (!self.var1) { self.var1 = …; } dispatch_async(dispatch_get_main_queue(), ^(void) { if ([self.var2 superview]) { [self.var2 removeFromSuperview]; } [self.Label setText:text]; }); }); 我是否需要使用__weak self 。 因为我在某些情况下读到dispatch_async不需要__weak self 。 在这里看最后的评论
我有一个关于这个简单的经常发生的情况在Android的问题。 我们有一个主要的活动,我们调用一个AsyncTask以及mainactivity的引用,以便AsyncTask可以更新MainActivity上的视图。 我将把事件分解成几个步骤 MainActivity创build一个AyncTask,将其引用传递给它。 AysncTask,开始工作,例如下载十个文件 用户改变了设备的方向。 这会导致AsyncTask中的孤立指针 当AsyncTask完成并尝试访问活动来更新状态时,由于空指针,它崩溃。 上面的解决scheme是在“Pro Android 4”一书中推荐的AsyncTask中保留一个WeakReference WeakReference<Activity> weakActivity; in method onPostExecute Activity activity = weakActivity.get(); if (activity != null) { // do your stuff with activity here } 这是怎么解决的? 我的问题是,如果我的asynctask正在下载十个文件,并在5完成后活动重新启动(由于方向改变),那么我的FileDownloadingTask将再次被调用? 之前调用的AsyncTask会发生什么? 谢谢,我对这个问题的长度表示抱歉。
有没有人研究了创build和垃圾收集Java WeakReference对象所涉及的运行时成本? multithreading应用程序是否存在性能问题(如争用)? 编辑:显然实际的答案将是JVM的依赖,但一般的意见也是受欢迎的。 编辑2:如果有人已经做了一些基准的performance,或者可以指出一些基准的结果,这将是理想的。 (抱歉,但赏金已过期…)
我明白如何使用weak_ptr和shared_ptr 。 通过计算对象中引用的数量,我明白shared_ptr是如何工作的。 weak_ptr如何工作的? 我试着通过boost源代码阅读,并且我不太熟悉提高,以了解它使用的所有东西。 谢谢。
Java的WeakHashMap经常被认为对于caching很有用。 看起来很奇怪,它的弱引用是用地图的键来定义的,而不是它的值。 我的意思是,这是我想要caching的值,我想要垃圾收集一次没有人除了caching强烈引用它们,不是吗? 在哪个方面有助于保持对键的弱引用? 如果你做一个ExpensiveObject o = weakHashMap.get("some_key") ,那么我希望caching保持到'o',直到调用者不再拥有强引用,我不在乎string对象“some_key”。 我错过了什么吗?