class MainClass { weak var weakClass: SomeClass! init() { // WARNING: Instance will be immediately deallocated because property 'weakClass' is 'weak' self.weakClass = SomeClass() }}class SomeClass {}
正如错误所说,一旦MainClass被初始化,weakClass立即释放,并且总是为零.
我用Xcode 9.3打开了同一个游乐场,我可以确认代码工作正常,没有错误或警告
这是Xcode 10中的错误还是我没有得到什么.如果是,是否有任何变通方法?
编辑:原始示例
class LoginCoordinator { var viewmodel: Loginviewmodel? var vIEwController: LoginVIEwController? init() { viewmodel = Loginviewmodel() viewmodel?.coordinator = self vIEwController = LoginVIEwController(viewmodel: viewmodel!) }}class Loginviewmodel: viewmodelDelegate { weak var coordinator: LoginCoordinator?}
在Loginviewmodel中,coordinator始终为nil
AppDelegate.swift
@UIApplicationMainclass AppDelegate: UIResponder,UIApplicationDelegate { var window: UIWindow? func setupVIEw() { let coordinator = LoginCoordinator() let navigationController = UINavigationController(rootVIEwController: coordinator.create) navigationController.isNavigationbarHIDden = true navigationController.navigationbar.isTranslucent = false window = UIWindow(frame: UIScreen.main.bounds) window?.rootVIEwController = navigationController window?.makeKeyAndVisible() window?.layer.cornerRadius = 6 window?.layer.masksToBounds = true } func application(_ application: UIApplication,dIDFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { setupVIEw() return true }解决方法 要理解这一点,您必须了解ARC的概念. ARC概念是自动引用计数意味着ARC将在内存中保留一些内容,只要分配的内存被某个变量强烈引用即可.如果它(ARC)发现一些已分配的内存没有任何强引用,它将解除它.因此,警告weakClass立即释放,并且总是为零.因为它没有任何强大的参考.请评论任何疑问.
以下是保留周期创建的一个示例:
class A {var classBObject: B? init() { classBObject = B() classBObject.classAObject = self // Creates a retain cycle }}class B { var classAObject: A? // Strong(by default all are strong) variable create retain cycle}
所以,在B类中如果我们采用弱var classAObject保留周期就不会发生.
总结以上是内存溢出为你收集整理的swift – Xcode 10 – 实例将立即解除分配,因为属性“弱”全部内容,希望文章能够帮你解决swift – Xcode 10 – 实例将立即解除分配,因为属性“弱”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)