美文网首页
Swift 自动引用计数

Swift 自动引用计数

作者: 点滴86 | 来源:发表于2016-08-11 18:25 被阅读6次

引用计数

import UIKit

class OnePerson {
    let name: String
    init(name: String) {
        self.name = name
        print("\(name) is being initialized")
    }
    
    deinit {
        print("\(name) is being deinitialized")
    }
}

var reference1: OnePerson?
var reference2: OnePerson?
var reference3: OnePerson?

reference1 = OnePerson(name: "Xiao Yao")

reference2 = reference1
reference3 = reference1

print("reference1 nil")
reference1 = nil
print("reference2 nil")
reference2 = nil
print("reference3 nil")
reference3 = nil

console log 如下


ARC截图1.png

weak 防止循环强引用

import UIKit

// weak 防止循环强引用
class Person {
    let name: String
    init(name: String) {
        self.name = name
    }
    
    var apartment: Apartment?
    deinit {
        print("\(name) is being deinitialized")
    }
}

class Apartment {
    let unit: String
    init(unit: String) {
        self.unit = unit
    }
    weak var tenant: Person?
    deinit {
        print("Apartment \(unit) is being deinitialized")
    }
}

var john: Person?
var unit4A: Apartment?

john = Person(name: "Jhon Applesseed")
unit4A = Apartment(unit: "4A")

john!.apartment = unit4A
unit4A!.tenant = john

print("John nil")
john = nil
print("unit4A nil")
unit4A = nil

console log 如下


ARC截图2.png

注意: Person 和Apartment 关系分析


weak关键字.png

unowned 关键字

import UIKit

// unowned 关键字
class Customer {
    let name: String
    var card: CreditCard?
    init(name: String) {
        self.name = name
    }
    
    deinit {
        print("Customer \(name) is being deinitialized")
    }
}

class CreditCard {
    let number: UInt64
    unowned let customer: Customer
    init(number: UInt64, customer: Customer) {
        self.number = number
        self.customer = customer
    }
    
    deinit {
        print("Card #\(number) is being deinitialized")
    }
}

var john: Customer?
john = Customer(name: "John Appleseed")
john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)
john = nil

console log 如下


ARC截图3.png

注意: Customer 和 CreditCard 关系如下


unowned关键字.png

unowned 例子

import UIKit

class Country {
    let name : String
    var capitalCity: City!
    init(name: String, capitalName:String){
        self.name = name
        self.capitalCity = City(name: capitalName, country: self)
    }
}

class City {
    let name: String
    unowned let country: Country
    init(name: String, country: Country) {
        self.name = name
        self.country = country
    }
}

var country = Country(name: "China", capitalName: "BeiJing")
print("\(country.name)'s capital city is called \(country.capitalCity.name)")

console log 如下


ARC截图4.png

避免闭包的循环强引用

//: Playground - noun: a place where people can play

import UIKit

// 避免闭包的循环强引用
class HTMLElement {
    let name: String
    let text: String?
    lazy var asHTML: () -> String = {
        [unowned self] in
        if let text = self.text {
            return "<\(self.name)>\(text)</\(self.name)>"
        } else {
            return "<\(self.name) />"
        }
    }
    
    init(name: String, text: String? = nil) {
        self.name = name
        self.text = text
    }
    
    deinit {
        print("\(name) is being deinitialized")
    }
}

var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world")
print(paragraph!.asHTML())
paragraph = nil

console log 如下


ARC截图5.png

注意: 分析如下


闭包避免循环强引用.png

相关文章

  • 【官方文档翻译】Swift4.0.3 ☞ Automatic R

    原文链接 自动引用计数(Automatic Reference Counting) Swift 使用 自动引用计数...

  • Swift自动引用计数

    自动引用计数(Automatic Reference Counting) Swift 使用自动引用计数(ARC)机...

  • Swift:基础(二十七)自动引用计数

    Swift 自动引用计数(ARC) Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存 通常...

  • 引用计数

    自动引用计数 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存 自动引用计数的工作机制 每...

  • Swift语法(五)

    一.自动引用计数 1.自动引用计数工作机制 1.1 swift和oc一样,采用自动引用计数来管理内存 1.2 当有...

  • Swift : 内存泄露原因及解决办法

    Swift 自动引用计数(ARC) 在Swift中 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存 ...

  • Swift3.0-自动引用计数

    自动引用计数 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift 内...

  • Swift - 自动引用计数

    自动引用计数 Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift 内...

  • Swift基础10

    自动引用计数 swift使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift内存管...

  • 第十六章 自动引用计数

    swift用自动引用计数(ARC)机制来对引用类型进行内存管理,(包括类实例和闭包)。 自动引用计数会引入循环强引...

网友评论

      本文标题:Swift 自动引用计数

      本文链接:https://www.haomeiwen.com/subject/tblssttx.html