在日常开发中,循环引用是一个十分常见的问题。当两个不同的对象强持有对方的时候,就会导致两者都无法释放,就会有循环引用的问题。
今天就来聊聊如何用 Instruments Allocations 来检测循环引用。
在appdelegate中修改didFinishLaunchingWithOptions方法,将window的rootViewController改为rootViewController为ViewController的UINavigationController。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window?.rootViewController = UINavigationController(rootViewController: ViewController())
return true
}
之后简单的在ViewController中设置一个rightBarButtonItem,点击跳转到RedViewController。在RedViewController中,RedViewController持有service,而service也持有RedViewController,这样就形成了循环引用,导致两者都无法释放。
import UIKit
class ViewController: UIViewController {
override func viewDidLo