• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift编程中用以管理内存的自动引用计数详解

Swift编程中用以管理内存的自动引用计数详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了taylor swift,swift,swift code是什么意思,swift bic,taylor swift好听的歌等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Swift 内存管理功能是通过使用自动引用计数(ARC)来处理。ARC用于初始化和取消初始化所述系统资源,从而释放使用的类实例的存储器空间当实例不再需要。ARC跟踪代码的实例有效地管理存储资源之间的关系的信息。

ARC的功能

  • 在每一次一个新的类实例被创建时ARC分配一块内存以存储信息 init()
  • 关于实例类型和其值的信息存储在存储器中
  • 当类实例不再需要它自动由 deinit() 释放,用于进一步类实例的存储和检索的存储空间
  • ARC保存在磁道当前参照类实例的属性,常量和变量,使得 deinit() 仅适用于那些不使用的实例。
  • ARC维护“强引用”这些类实例属性,常量和变量来限制释放当当前的类实例正在使用。

ARC 程序
class StudDetails {
    var stname: String!
    var mark: Int!
    init(stname: String, mark: Int) {
        self.stname = stname
        self.mark = mark
    }
   
    deinit {
        println("Deinitialized \(self.stname)")
        println("Deinitialized \(self.mark)")
    }
}

let stname = "swift"
let mark = 98

println(stname)
println(mark)
</div>
当我们使用 playground 运行上面的程序,得到以下结果。

swift
98
</div>

ARC 强参考周期类实例
class studmarks {
    let name: String
    var stud: student?
   
    init (name: String) {
        println("Initializing: \(name)")
        self.name = name
    }
   
    deinit {
        println("Deallocating: \(self.name)")
    }
}

class student {
    let name: String
    var strname: studmarks?
   
    init (name: String) {
        println("Initializing: \(name)")
        self.name = name
    }
   
    deinit {
        println("Deallocating: \(self.name)")
    }
}

var shiba: studmarks?
var mari: student?

shiba = studmarks(name: "Swift")
mari = student(name: "ARC")

shiba!.stud = mari
mari!.strname = shiba
</div>
当我们使用 playground 运行上面的程序,得到以下结果。

Initializing: Swift
Initializing: ARC
</div>

ARC弱和无主参考
Class类型属性有两种方法可以解决强引用周期:

  1. 弱引用
  2. 无主参考

这些引用是用来使一个实例指在一个基准周期其他实例。然后实例可以为每一个实例参考代替处理强引用周期。当用户知道某些情况下可能会返回 'nil' 值,我们可能会指向使用弱引用。当实例会返回不是零的东西,然后使用无主参考声明。

弱引用程序
class module {
    let name: String
    init(name: String) { self.name = name }
    var sub: submodule?
    deinit { println("\(name) Is The Main Module") }
}

class submodule {
    let number: Int
   
    init(number: Int) { self.number = number }
   
    weak var topic: module?
   
    deinit { println("Sub Module with its topic number is \(number)") }
}

var toc: module?
var list: submodule?
toc = module(name: "ARC")
list = submodule(number: 4)
toc!.sub = list
list!.topic = toc

toc = nil
list = nil
</div>
当我们使用 playground 运行上面的程序,得到以下结果。

ARC Is The Main Module
Sub Module with its topic number is 4
</div>

无主参考程序
class student {
    let name: String
    var section: marks?
   
    init(name: String) {
        self.name = name
    }
   
    deinit { println("\(name)") }
}
class marks {
    let marks: Int
    unowned let stname: student
   
    init(marks: Int, stname: student) {
        self.marks = marks
        self.stname = stname
    }
   
    deinit { println("Marks Obtained by the student is \(marks)") }
}

var module: student?
module = student(name: "ARC")
module!.section = marks(marks: 98, stname: module!)
module = nil
</div>
当我们使用 playground 运行上面的程序,得到以下结果。

ARC
Marks Obtained by the student is 98
</div>

闭包强引用周期
当我们分配一个闭包至类实例属性,闭包的主体以捕获特定实例强参考周期发生。强引用闭合由 self.someProperty 或 self.someMethod()定义。强引用周期用作闭包引用类型。
class HTMLElement {
    let samplename: String
    let text: String?
   
    lazy var asHTML: () -> String = {
        if let text = self.text {
            return "<\(self.samplename)>\(text)</\(self.samplename)>"
        } else {
            return "<\(self.samplename) />"
        }
    }
   
    init(samplename: String, text: Str

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift 环境搭建
  • Swift 基本语法
  • Swift 数据类型
  • Swift 变量
  • Swift 常量
  • Swift 运算符
  • Swift 条件语句
  • Swift 循环
  • Swift 字符串
  • Swift 字符(Character)

相关文章

  • 2017-05-28深入理解Swift中的变量与常量
  • 2017-05-28Swift心得笔记之函数
  • 2017-05-28快速排序算法在Swift编程中的几种代码实现示例
  • 2017-05-22Swift 类型转换
  • 2017-05-28Swift开发中switch语句值绑定模式
  • 2017-05-28探讨Swift数组和字典
  • 2017-05-28Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题
  • 2017-05-28浅谈Timer和TimerTask与线程的关系
  • 2017-05-28解决Android Studio安装后运行出错dose not...和Internal error...
  • 2017-05-28gson ajax 数字精度丢失问题的解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • hibernate 三种状态的转换
    • gson ajax 数字精度丢失问题的解决方法
    • 详解在swift中实现NSCoding的自动归档和解档
    • JVM教程之内存管理和垃圾回收(三)
    • Swift中闭包实战案例详解
    • 详解Swift编程中的for循环的编写方法
    • Swift教程之类的析构详解
    • Swift心得笔记之函数
    • iOS UITableView展开缩放动画实例代码
    • Linux centos7环境下jdk安装教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有