我最简单的描述问题的方法是用一个小例子来显示。未关闭变量的关闭变量
//In a swift file
myObjectiveCObject.setCallbackBlock {(object: AnyObject!) -> Void in
var chunkOfMemory = //fill up var with memory stuff. Self is never referenced.
}
myObjectiveCObject.startParsing()
//In the objective-c class file
@property (nonatomic, copy) MyBlockType callbackBlock;
- (void)startParsing {
//loop around thousands of times calling
self.callbackBlock(someNewObject)
}
从每个封闭呼叫分配的内存不会被释放,直到我与Objective-C的对象来完成了。当然,预期的行为是在每次关闭呼叫后释放内存?
不会。您的循环“成千上万次”将调用数千个该块,这些块将使用数千个相同的分配对象加载相同的变量数千次,并将数千个相同的帧推入堆栈。你是一个需要更加保守的记忆! – CodaFi 2014-10-22 02:37:01
@CodaFi从设计层面上来说,我该如何解决这个问题?使用解析块非常优雅。有没有办法解决内存问题? – 2014-10-22 03:06:02