这个问题在这里已有答案:
Class 是一个结构指针,它是一个对象类型还是标量,我猜是决定使用 strong / weak 或 assign 的关键?
Class
strong
weak
assign
在Objective-C中,Class是一个对象,是元类的实例 . 它是一个可保留的对象指针类型 . 参考:clang.llvm.org也是这个SO thread .
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
//因为它的引用计数为0
var passport: Passport? = Passport.init(country: "India") objHuman1?.passport = passport passport = nil
分配人类
分配护照
//这是魔术你不能解除护照 . 因为Human类有Storng的Passport参考 .
//但是如果在Human Class中声明护照变量的弱属性,则:
weak var passport:Passport!
OUTPUT Will
//分配人类
//分配Passport
// Deallocate Passport
这是Week和Strong property 的魔力 . Swift默认属性为Strong .
2 回答
在Objective-C中,Class是一个对象,是元类的实例 . 它是一个可保留的对象指针类型 . 参考:clang.llvm.org也是这个SO thread .
Lets see different scenario 1 .
OUTPUT:
// - 分配人类
// - 解除分配人类
//它自动解除分配,因为它由ARC管理 .
2.
OUTPUT
// - 分配人类
//它不会自动释放,因为人类引用计数1(objHuman1)
OUTPUT
// - 解除分配人类
//因为它的引用计数为0
OUTPUT
分配人类
分配护照
//这是魔术你不能解除护照 . 因为Human类有Storng的Passport参考 .
//但是如果在Human Class中声明护照变量的弱属性,则:
OUTPUT Will
//分配人类
//分配Passport
// Deallocate Passport
这是Week和Strong property 的魔力 . Swift默认属性为Strong .