问题标签 [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 - 在 SplitView 中设置两个 View 以保持对彼此的引用是不是很糟糕?
我目前正在编写一个 RSS 程序,其中我的 splitViewController 的视图必须相互通信。它们目前都持有彼此的属性实例,如下所述,在 App Delegate 中声明。我想知道这是否是不好的编程习惯,如果是,我应该怎么做才能避免它?
/ ----------------------------------------- /
objective-c - 从 GCD dispatch_async 块中调用 super:安全吗?
我有点苦恼。我知道从块中调用 [self methodName] 将导致保留周期。
然而,在这个类中,由于多线程,我不能允许从块以外的任何其他地方访问块正在访问的方法,因为它可能会导致严重的问题。
当前代码:
正是这样做的,它调用[self getmethod]。虽然调度的块可以运行此方法,但我不希望此类之外的任何东西调用此方法。那么,是否可以像这样覆盖这个继承的方法:
然后将块更改为:
我已经尝试过了,它可以在不调用 [self getMethod] 的情况下工作,但是超级会被保留、正确释放等吗?是的,我正在使用 ARC。在一个块内调用 super 会导致任何问题吗?有没有办法让 __weak 改为 super ?
或者,我怎样才能禁止直接调用 [self getMethod] (它是继承的)并且只在内部使用它?我知道 Objective-C 并没有完全实现这一点,但我知道有一些技巧,比如只在实现文件中声明和实现一个方法。
编辑#1:
我尝试过使用 SEL & IMP 和函数指针。问题是 IMP 和函数指针需要一个实例作为参数,这使得孔点静音:
这只是调用继承的方法。尝试将它与 super 一起使用只会产生错误。在这一点上,我将继续并简单地在块内使用 super,并尝试分析它是否会导致任何保留周期。
编辑#2:
根据 newacct 的回答,这就是我最终要做的事情:
我希望这应该避免任何保留周期,尽管我还没有真正分析它。
ios - 类保留计数
这里有很多关于避免使用块的保留循环的文章,但是在使用类和类方法时呢?假设我有这样的课程:
来电者想说:
调用者必须声明 MyClass 的 unsafe_unretained 副本吗?还是像单例这样的类,不会增加它的保留计数?既然我们希望它一直存在,我们是否将一个类的保留计数发送到月球是否重要?
ios - 不使用 ARC 时替换 __weak
我有这行代码:
这是触发此编译器错误:
原因是我没有启用 ARC(还没有准备好进行切换)。所以从另一个 StackOverFlow 问题中,我被推荐使用:
这使错误消失了,但是对于我正在使用它的上下文,它不起作用(如果有兴趣,请参阅此问题:如何取消 NSOperationQueue)。
所以我的问题是,在这种情况下我可以用什么替换__weak
关键字来消除这个警告?当我使用 时,一切实际上都正常工作__weak
,但我担心它不会支持未来版本的 iOS。
ios - 在弱指针上调用 getter 并将其传递给方法时保留循环可能性
我整天都在阅读更多关于保留周期的内容,我开始感到困惑。所以我只想检查几件事。(只是为了澄清,我使用的是 ARC)
所以假设我有MyFirstClass
. MyFirstClass
有一个强烈指向的(默认情况下)实例变量MyChildClass
:
MyFirstClass
还有一个 getter(在 .h 中公开可用),如下所示:
现在假设我完全有另一堂课,MySecondClass
. MySecondClass
有一个弱实例变量指向MyFirstClass
如下:
有一个父类同时拥有两者MyFirstClass
,MySecondClass
因此MySecondClass
只有一个弱引用,MyFirstClass
因此它不会阻止父类在需要时释放它。
MySecondClass
也有它自己的子类,也被一个实例变量强烈引用:
MySecondChildClass
想要引用MyFirstClass
的MyChildClass
对象。
所以我想我在这里也使用了一个弱指针,在MySecondChildClass
:
它有一个自定义初始化来设置它:
最后,有一个方法MySecondClass
可以创建MySecondChildClass
:
这一切都正确吗?我有 90% 的把握这一切都很好,但我很困惑。
当我使用 时_firstClass.child
,会创建一个指向它的强指针吗?我应该__weak
在该方法调用中引用某处吗?在初始化期间怎么样MySecondChildClass
?它在设置实例变量之前有一个临时指针,MyChildClass
这是否会创建一个我应该担心的强指针?
任何澄清都会很棒。
ios - iOS 块。如何从块设置器中引用对象实例?
我有一个具有指向块的属性的对象:
我用一个块初始化属性。在block
I 中指的是对象实例:
但是,我收到有关保留循环的编译警告:
这样做的正确方法是什么?
谢谢,道格
objective-c - 排行榜请求、嵌套块和保留周期
我为我的 iPhone 游戏开发了一个排行榜显示类。该类具有以下实例方法。
如您所见,该方法复制排行榜请求,执行它,然后调用提供的完成处理程序。我的游戏中的一个图层调用这个方法如下。
当层和显示都被释放并且请求尚未完成时,我的游戏崩溃了。当请求完成时,它会尝试向已释放的实例发送消息,然后崩溃。是否可以取消排行榜请求?如果没有,有什么办法可以避免崩溃而不会导致内存泄漏?
objective-c - Objective-C / Blocks - 这不是一个保留周期吗?
我认为这段代码创建了一个保留周期,因为块中的块在块中-longRunningTaskWithCompletion:
捕获自我(设置字符串属性)并将块添加到调度队列属性中。
objective-c - 使用ARC在self.managedObjectContext上调用perfromBlock时保持循环?
在下面的代码中,我是否正确理解了保留周期问题,是否会有保留周期?
ios - 如何修复“在此块中强烈捕获'块'可能会导致保留周期”
我正在处理这段代码,它在网络上执行一些冗长的异步操作,当它完成时会触发一个完成块,在该块中执行一些测试,如果变量获得某个值,另一个冗长的操作应该立即开始:
使用此代码,我从编译器收到此警告:
我变了:
在:
但我收到了另一个警告:
我怎样才能解决这个问题?
谢谢
尼古拉