Hen*_*ang 0 memory-leaks objective-c objective-c-runtime ios swift
我接受了采访,并被要求使用Objective-C和Swift创建内存泄漏.那么如何使用Objective-C和Swift创建内存泄漏?
您只需要创建一个参考周期.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在运行时没有任何垃圾回收.它只跟踪引用计数.在这种情况下,即使我们没有任何引用a或b代码,它们的引用计数也永远不会达到0,因为它们相互引用(除非我们手动打破这个循环).
UPD(感谢@Sulthan):你实际上甚至不需要两个对象,一个强大的自我引用就足够了:
a.otherObject = a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |