问题标签 [strong-references]

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 投票
3 回答
2900 浏览

ios - Strong and weak modifiers with ios interface elements

in my projects I don't use Interface Builder and I've noticed one thing that I don't know how to explain. Yet. So, to the point. When we are using IB and defining elements of user interface like UILabel or UIButton in our controller we use this ugly prefix IBOutlet and a 'weak' modifier. This works like music. But when we decide not to use IB and define whole user interface from code it just doesn't work.

Let's assume that I want to add UILabel to controller (using IB). I will have something like this i *.h file:

And I don't have to do anything more in *.m file. But if I remove the *.xib file and try to setup my UILabel in, for example, one of init methods, like this:

It doesn't work until I alter my *.h file to this:

Now, I know the difference between weak and strong but I have no idea why we can use weak for ui elements when using IB? Something must keep a strong pointers to these elements, right? But what?? In second case it is controller, but I don't understand how it behaves in the first case.

0 投票
4 回答
3235 浏览

objective-c - 为什么在强引用消失后我的弱引用没有被清除?

我有点固执,但我想很好地理解弱引用和强引用,所以我再次问你。

考虑一下:

结果myText: (null)很明显——弱引用在赋值后被设置为空,因为没有对指向对象的强引用。

但在这种情况下:

输出:

我的问题:

为什么在strongPtr = [[NSString alloc] initWithString:@"abc"];弱指针值没有更改为 nil 之后(为什么在开始时创建的对象仍然存在于内存中,尽管它没有任何强引用? - 或者它可能有?)


我试过那个:(但我想添加评论并不好)。我在@autorealesepool 中包含了创建strongPtr 的代码。我不确定它是否是正确的解决方案,但它可以工作......

输出:

0 投票
2 回答
1458 浏览

objective-c - 强引用(目标 -C)

我试图更好地理解强引用,但在我将在下面列出的特定示例的上下文中。

假设我有一个名为 gPrefs 的全局变量。它是 Preference Class 类型,是我制作的自定义类。

我在其界面中声明了以下内容......

这是一个指向 NSURL 对象的指针。我已经给了它(强)参考,这意味着它会一直存在而不释放它的内存。

现在假设我在其他地方完全有一个实例函数,如下所示。

如果用户按下面板的 OK 按钮,我将创建一个名为 theUrl 的本地指针实例变量。然后我将全局变量 masterFolder 指针设置为局部实例变量指针。

如果我理解正确,ARC 应该在它认为不再使用时在函数结束时释放对象。

因此,应该在函数结束时释放 URL。

但是,如果我理解(强)引用,编译器可能足够聪明地意识到,由于我将全局首选项指针更改为不同的指针,它将使内存中的其他指针引用保持活动状态(或保留它)。

如果我没有将我的 masterFolder 指针声明为 (strong),那么在函数结束后 masterFolder 指针是否会为零?

我的实验表明,尽管到达本地实例函数的末尾,但保持它(强)似乎保留了 localInstance 指针的值。

我的问题是为什么?即使masterFolder是一个强引用,如果我将它分配给一个localInstance指针并且该指针在Instance函数的末尾被删除,为什么当我在其他任何地方的实例函数之外再次读取masterFolder的值时没有NIL出来.

我对(强)引用的理解有点(弱)。没有双关语的意思。

0 投票
1 回答
112 浏览

automatic-ref-counting - 为什么我的应用程序使用 __autoreleasing + __strong 会崩溃?

这是我的代码:

痕迹(对不起,不能复制粘贴):

在此处输入图像描述

问题是:发生了什么事?

我需要有关此代码中发生的情况的详细信息。真的很有趣......仪器没有显示任何泄漏,僵尸等。

0 投票
1 回答
141 浏览

automatic-ref-counting - ARC从强到强

我想知道ARC下的正确方法。

我在控制器中有强大的 NSArray(我自己的自定义类对象)@property,当我初始化另一个控制器时,我必须将这些数组中的一个 NSString 传递给另一个弱控制器的指针。但我不喜欢这个,因为我需要对它进行排序

在主控制器中

另一个控制器有

1)据我所知,第一个返回弱指针,我分配给另一个弱指针,所以如果 mainController 中的代码超出范围,我的 reportLabel 变为“nil”?

2)所以如果我让reportLabels属性(强)这可以解决问题但是还有其他方法吗?最后我还应该做这样的“复制”吗?

0 投票
1 回答
71 浏览

java - 为什么我的实例被垃圾收集

我有以下类层次结构。出于某种原因,即使我保持对它的强烈引用,我的听众也会被垃圾收集。

Channel 类在 WeakHashSet 中维护一组侦听器。所以我在 MySubModule 中注册了监听器,同时在同一个类(变量监听器)中保持对它的强引用。但是,JVM 仍然会垃圾收集侦听器实例。一旦有强引用,它不应该留在 WeakHashSet 中吗?在这种情况下,我真的相信我有一个以上。有人可以告诉我我在这里做错了什么吗?

编辑:我也在上面添加了 Channel 的实现。同样在 main(...) 方法中,我有以下内容:

0 投票
2 回答
422 浏览

ios - Objective C - 两个字典使用相同的值,强或弱

我是目标 c 的新手,我遇到了一个有趣的情况,我需要两个指向相同值的不同 NSDictionary 对象。在那种情况下,我应该在属性声明中使用强还是弱?或者我应该做一个强而另一个弱?

在游戏.m

在用户.m

在这两种情况下,键都是整数,但值将是我自己制作的答案对象。answers1 和 answers2 都需要存在大致相同的时间。当需要摆脱一个时,摆脱另一个就可以了。

0 投票
2 回答
92 浏览

objective-c - ARC 中的 UIViewController 保留

我有一个 UIViewController 的子类 -> MyPopUpViewController

我不能将这个 MyPopUpViewController 作为实例变量,因为它来自外部,并且可能有很多和多个这样的弹出窗口可以出现。到目前为止,我尝试了这个,由于没有被保留,它在委托调用中崩溃:

我的主视图控制器:

一旦弹出窗口出现,当点击确定按钮时,它就会崩溃并且永远不会到达那个 NSLog。我该如何改变

MyPopUpViewController *popupView = [[MyPopUpViewController alloc] init];

..所以它会保留而不使其成为实例变量?

提前致谢。

0 投票
2 回答
758 浏览

ios - iOS7中“主”视图下的元素的存储(弱或强)

在阅读了很多关于 iOS 编程的书籍和文档之后,我仍然感到困惑 - 当从“主”视图下方的 UI 元素拖动控件时,选择哪种存储类型(弱或强)?(我认为“主要”是指分配给viewViewController 属性的 UIView):

在此处输入图像描述

例如,我正在尝试重新创建示例iOS SDK:Working with NSUserDefaults by Mr. Jeroen van Rijn - with Xcode 5.0.2 and iOS7

在此处输入图像描述

他的代码缺少弱/强说明符,我想知道,这里哪个是正确的?

0 投票
3 回答
2012 浏览

ios - iOS:如果强委托设置为 self,则不会调用 dealloc

比如说,我有一个UIView我声明的类型的类(比如“MyClass”),一个(nonatomic, strong)类委托类型的属性,用于处理事件将由该类触发。

应用程序启用了 ARC,它工作得很好,有一次我发现了一些有趣的东西,我在我的一个视图控制器(比如 TempViewController)中放置了一个 dealloc,我在其中设置了 to 的MyClass委托self。每当我从 TempViewController 弹出时,它应该调用它的 dealloc 方法,但事实并非如此。我不知道为什么,但不是,我为其他类放置了deallocs,它们都被调用了。

然后我发现,它没有在 TempViewController 中调用,因为我设置了 MyClass 委托。我也对其他类进行了同样的测试,然后它停止调用 dealloc。

后来我更改了,将属性委托给,assign而不是strong,尽管它再次正常工作。

我发现的另一种解决方案是,通过设置MyClassnilviewDidDisappear委托(就像我们为MKMapViewor所做的那样UIWebView),它将为同一个 TempViewController 类调用 dealloc。

是什么导致了问题?任何帮助,建议?