首页 文章

在Objective-C ARC中使用Class类型属性时的内存管理属性? [重复]

提问于
浏览
0

这个问题在这里已有答案:

Class 是一个结构指针,它是一个对象类型还是标量,我猜是决定使用 strong / weakassign 的关键?

2 回答

  • 0

    在Objective-C中,Class是一个对象,是元类的实例 . 它是一个可保留的对象指针类型 . 参考:clang.llvm.org也是这个SO thread .

  • 0
    import UIKit
    
    class Human{
        var name:String!
        var passport:Passport!
       // weak var passport:Passport!
    
        init(name:String) {
          self.name = name
          print("Allocate Human")
      }
    
    deinit {
        print("Deallocate Human")
    }
    
    }
    
    class Passport {
       var country:String!
       var human:Human!
    
       init(country:String) {
         self.country = country
         print("Allocate Passport")
    }
    deinit {
        print("Deallocate Passport")
        }
    }
    

    Lets see different scenario 1 .

    Human.init(name: "Arjun")
    

    OUTPUT:

    // - 分配人类

    // - 解除分配人类

    //它自动解除分配,因为它由ARC管理 .

    2.

    var objHuman1: Human? = Human.init(name: "Arjun")
    

    OUTPUT

    // - 分配人类

    //它不会自动释放,因为人类引用计数1(objHuman1)

    objHuman1 = nil
    

    OUTPUT

    // - 解除分配人类

    //因为它的引用计数为0

    var passport: Passport? = Passport.init(country: "India")
    objHuman1?.passport = passport
    passport = nil
    

    OUTPUT

    分配人类

    分配护照

    //这是魔术你不能解除护照 . 因为Human类有Storng的Passport参考 .

    //但是如果在Human Class中声明护照变量的弱属性,则:

    weak var passport:Passport!
    

    OUTPUT Will

    //分配人类

    //分配Passport

    // Deallocate Passport

    这是Week和Strong property 的魔力 . Swift默认属性为Strong .

相关问题