使用Objective-C和Swift创建内存泄漏

Hen*_*ang 0 memory-leaks objective-c objective-c-runtime ios swift

我接受了采访,并被要求使用Objective-C和Swift创建内存泄漏.那么如何使用Objective-C和Swift创建内存泄漏?

Fre*_*ame 7

您只需要创建一个参考周期.OBJ-C:

@interface MyClass : NSObject
@property (strong) MyClass *otherObject;
@end

@implementation MyClass
@end

//...

MyClass *a = [MyClass new];
MyClass *b = [MyClass new];
a.otherObject = b;
b.otherObject = a;
Run Code Online (Sandbox Code Playgroud)

这同样适用于Swift:

class MyClass {
    var otherObject: MyClass?
}

let a = MyClass()
let b = MyClass()
a.otherObject = b
b.otherObject = a
Run Code Online (Sandbox Code Playgroud)

理由:a有强烈的参考价值b,并且b有很强的参考价值a.ARC在运行时没有任何垃圾回收.它只跟踪引用计数.在这种情况下,即使我们没有任何引用ab代码,它们的引用计数也永远不会达到0,因为它们相互引用(除非我们手动打破这个循环).

UPD(感谢@Sulthan):你实际上甚至不需要两个对象,一个强大的自我引用就足够了:

a.otherObject = a
Run Code Online (Sandbox Code Playgroud)