10得票1回答
将KVO观察者添加到self会导致内存泄漏吗?

在一个 NSObject 中,你有一个名为 "keyPath" 的属性,你想要观察它本身并使用:[self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:nil]; 上面的代码是...

7得票1回答
Swift内存管理:将函数存储在变量中

我正在寻找将函数作为变量存储在其他对象中的最佳实践。具体而言,我希望避免在函数中捕获self时产生的保留循环。 来自Objective-C和Blocks的经验告诉我通常会这样做: __weak id _self = self; iVar.someBlock = ^{ [_self ...

10得票1回答
在Swift中从字典中获取值或键时产生循环引用问题

当我从字典中获取值并将它们放入数组时,我无法再释放内存。我尝试从数组和字典中移除所有对象,但这些对象仍然存在于某个地方(析构函数未被调用)。 我是按照以下方式尝试的:class MyData { let i = 0 init () { NSLog("Init")...

8得票2回答
在Swift中使用代理数组时如何避免循环引用问题

在我的一个班级中,我使用委托数组(该类是单例)。这会导致保留周期。当我只使用一个委托时,我知道可以通过使委托弱化来避免保留周期。但是对于我的委托数组,这不起作用。 我该如何避免这种保留周期。 示例: protocol SomeDelegate: class { func some...

22得票3回答
递归块和ARC中的保留循环

编辑2: 不。建议的答案是关于异步调用。我想要并需要同步调用,就像普通的标准递归调用一样。 编辑: 当......__unsafe_unretained void (^unsafe_apply)(UIView *, NSInteger) ; 编译时没有警告或错误,但在运行时,将NULL存...

12得票1回答
如何修复“在此块中强烈捕获'block'可能会导致保留周期”的问题

我正在处理这段代码,它会在网络上执行一些漫长的异步操作,并在完成后触发一个完成块,在该块中进行某些测试,如果变量获得特定值,那么另一个漫长的操作应立即开始:-(void) performOperation { void(^completionBlock) (id obj, NSErr...

14得票4回答
无法在Swift中对闭包进行弱引用

更新:我尝试了不使用强引用来编写它,似乎没有泄漏。因此,也许这个问题已经不再需要了。 在Objective-C ARC中,当您希望一个闭包能够在闭包内部使用自身时,该块不能捕获对自身的强引用,否则将会产生保留循环。因此,您可以使闭包捕获对自身的弱引用,如下所示:// This is a ...

9得票1回答
了解循环引用的位置并消除它们

我想知道是否有一种简单的方法(或至少一种方法)可以找出程序中存在循环引用的位置。另外,如果我知道这些保留循环引用的位置,根据它们的类型(例如,变量或闭包),如何将它们设置为弱引用。我需要停止所有与self(我的GameScene)相关的保留循环引用,这样当我不再需要它并且想要重新启动时,它可以...

54得票7回答
在UIView.animateWithDuration(...)的闭包中是否需要使用[unowned self]?

UIView.animateWithDuration(1, animations: { [unowned self] in self.box.center = self.boxTopRightPosition }, ...

21得票2回答
在这个块中强引用 'self' 很可能会导致循环引用问题。

我有一个带有block的请求。但是编译器会发出警告: "在这个block中强引用了'self',很可能导致循环引用" __weak typeof(self) weakSelf = self; [generalInstaImage setImageWithURLRequest:[NSUR...