Swift 列举内存管理与异常处理具体代码.docx

Swift 列举内存管理与异常处理具体代码.docx

Swift?列举内存管理与异常处理具体代码

clzH.insG.foo()//funcfooinClassG

//此时clzH的实例被clzG的insH无主引用,会被销毁,clzG和clzH实例都能被释放

clzH=nil//deinitClassH\ndeinitClassG

6.Swift闭包产生的循环引用

//Swift5闭包产生的循环引用

classClassJ{

varfield=fieldj

lazyvarclosure:()-Void={

print(self.field)

deinit{

print(deinitClassJ)

varobjJ:ClassJ=ClassJ()

objJ.closure()

//因为闭包引用了类的成员属性,导致实例无法释放,进而导致闭包无法释放,产生循环引用

objJ=nil//此处并没有打印deinit中信息

7.Swift解决闭包产生的循环引用

//Swift5解决闭包产生的循环引用

classClassK{

varfield=fieldk

lazyvarclosure:()-Void={

//使用捕获列表对self进行无主引用的转换

[unownedself]()-Voidin

print(self.field)

deinit{

print(deinitClassK)

varobjK:ClassK=ClassK()

objK.closure()

objK=nil//deinitClassK

8.Swift自定义异常类型

//Swift5自定义异常类型

enumCustomError:Error{

caseErrorOne

caseErrorTwo

caseErrorThree

print(error)

//throwCustomError.ErrorOne//抛出的异常未捕获会终止,不会打印complete

print(complete)

9.Swiftdo-catch捕获异常,try执行会抛异常的函数

//Swift5使用do-catch捕获异常,try执行会抛异常的函数

//通过函数抛出异常

funcfuncError()throws-String{

throwCustomError.ErrorTwo

//使用do-catch捕获异常

//使用try执行可能会抛出异常的函数

tryfuncError()

}catchCustomError.ErrorOne{

print(ErrorOne)

}catchCustomError.ErrorTwo{

print(ErrorTwo)

}catchCustomError.ErrorThree{

print(ErrorThree)

//使用try将函数执行的结果映射为Optional类型

letresult=tryfuncError()

if(result==nil){

print(execfailed)

//try!强行终止异常的传递,如果发生异常,则程序中断

//try!funcError()

10.Swift函数延时执行结构

//Swift5函数延时执行结构:避免在抛异常的时候,保证某些必须的代码块要执行,如释放资源

funclazyFunc()throws-Void{

defer{

//函数结束时会得到执行

print(lazypartoffunc)

print(execlazyFunc)

throwCustomError.ErrorThree

//execlazyFunc

//lazypartoffunc

trylazyFunc()

GitHub源码:ReferenceError.playground

文档评论(0)

1亿VIP精品文档

相关文档