这节课需要讲的就是可选链,内存管理,引用计数,unowned解决

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

 import UIKit
//可选链(optional chain)
//class A {
// var p: B?
//
//}
//
//class B
//{
// var p: C?
//}
//
//class C {
// func cm() -> String {
// print("cm")
// return "abc"
// }
//}
//
//let insa = A()
//let insb = B()
//let insc = C()
//insa.p = insb
//insb.p = insc
//let insb = insa.p
//var insc: C?
//if insb != nil {
// insc = insb?.p
//}
//
//if insc != nil {
// insc?.cm()
//}
//中间任何一个地方为nil,不报错,但导致整个结果为nil
//如果没有一个地方为nil,整个表达式正常运行
//if let r = insa.p?.p?.cm() {
// print(r)
//} /*
swift中的或者java,c#语言的内存管理,指的就是引用类型对象的管理
这三个语言,值类型不需要进行内存管理,值类型是放在栈里的,程序会自动管理,不需要特别的机制 三种语言的内存管理,值得就是对“堆(heap)”里面的对象的管理 swift中的内存管理技术,叫做arc,自动引用计数(Auto Reference Count)
但对对象的引用计数为0时,立即销毁对象 这种管理一般会产生两种错误可能
1.空引用
2.内存泄露(leak)
某个时候,某些对象分配了内存,但因为某些原因,导致程序结束时,此对象所占的内存没有被回收
我们可以控制的引用计数的数量
增加的方法
1.声明变量,指向某个对象(直接new或者把别的变量的值赋值给你 ) 减少的方法
1.f = nil(表示不指向任何东西)
2.变量一般会运行在函数中,变量本身是存放在栈中的
所以函数结束时,此变量消失 关于循环引用swift提供了两种方法来解决,一种是weak(弱),一种是unowned(未拥有)
1.weak 可以修饰在可为空(?,!)的属性上
2.unowned只能修饰在非可为空的属性上。 */
//class A {
// var p: B?
// init() {
// print("a********************")
// }
// deinit {
// print("a-----------------")
// }
//}
//
//class B{
// var p: A?
// init() {
// print("bbbb********************")
// }
// deinit {
// print("bbbbbb-----------------")
// }
//
//}
//下面说明的是计数的问题
//let f1 = A() //此时A对象有一个引用
//var f1: A? = A() //此时A对象有一个引用
//var f2: A? = f1 //此时A对象有二个引用
//f1 = nil
//f2 = nil
//A()
//func test () {
// let aaaa = A()
// //aaaa.xxxxxxx
//
//} //函数结束时,aaaa变量不存在了,所以没有东西指向A()对象
//test() //下面说明的是循环引用的问题,导致的leak
//var insa: A? = A()
//var insb: B? = B()
//
//insa?.p = insb
//insb?.p = insa
//
//insa = nil
//insb = nil //下面演示解决办法
//class A {
// var p: B?
// init() {
// print("a********************")
// }
// deinit {
// print("a-----------------")
// }
//}
//
//class B{
// var p: A?
// init() {
// print("bbbb********************")
// }
// deinit {
// print("bbbbbb-----------------")
// }
//
//}
//
//var insa: A? = A()
//var insb: B? = B()
//
//insa?.p = insb
//insb?.p = insa //insb = nil
//
//insa = nil //----------unowned解决--------------------- //class A {
// var p: B?
// init() {
// print("a********************")
// }
// deinit {
// print("a-----------------")
// }
//}
//
//class B{
// unowned var p: A
// init(a: A) {
// print("bbbb********************")
// p = a
// }
// deinit {
// print("bbbbbb-----------------")
// }
//}
//
//var insa: A? = A()
//var insb: B? = B(a: insa!)
//insa?.p = insb
//insa = nil
//insb = nil //闭包的循环引用问题与解决
class ClosureDemo {
var name = "asdfas" // lazy var getName:()-> Void = {
// [unowned self] in
// //let name = "def"
// print(self.name)
// } var getName2: ()-> Void {
get { return {
[unowned self] in
//let name = "def"
print(self.name)
}
} } deinit {
print("closure-----------------")
}
} var cd: ClosureDemo? = ClosureDemo()
//cd?.getName()
//cd = nil cd?.getName2()
cd = nil

到这里,swift语言基础的知识就结束了,之后我们就开始进行UI的学习.

IOS系列swift语言之课时八的更多相关文章

  1. IOS系列swift语言之课时二

    今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...

  2. IOS系列swift语言之课时三

    今天需要掌握的内容就是:闭包.类.结构体.属性(计算属性和延迟属性) 同样里面有一些题目,有兴趣的可以做一下. 首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量 ...

  3. IOS系列swift语言之课时七

    这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...

  4. IOS系列swift语言之课时六

    这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...

  5. IOS系列swift语言之课时五

    过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...

  6. IOS系列swift语言之课时四

    今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...

  7. iOS之Swift语言的学习

    好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...

  8. iOS使用Swift语言检查并提示更新

    项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...

  9. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

随机推荐

  1. CGI

    CGI的工作原理一般是这么定义的: 客户端web浏览器浏览某个主页后,利用一定的方式提交数据,并通过HTTP协议向Web服务器发出请求,服务器端的HTTP Daemon(守护进程)将描述的主页信息通过 ...

  2. Elasticsearch初探

     elasticsearch中的概念同传统数据库的类比如下: Relational DB -> Databases -> Tables -> Rows -> ColumnsEl ...

  3. css3画三角形的原理

    以前用过css3画过下拉菜单里文字后面的“下拉三角符号”,类似于下面这张图片文字后面三角符号的效果 下面是一个很简单的向上的三角形代码 #triangle-up { width: 0; height: ...

  4. RabbitMQ小结

    1.帮助文档 rabbitmq官网:http://www.rabbitmq.com/ rabbitmq谷歌论坛:https://groups.google.com/forum/#!forum/rabb ...

  5. MariaDB 10.1配置

    [mysqld]datadir=C:/Program Files/MariaDB 10.1/dataport=3306sql_mode="STRICT_TRANS_TABLES,NO_ENG ...

  6. messagePaneHost

    Microsoft.Dynamics.Framework.UI.WinForms.Controls.MessageBarType messageBarType; super(); imageList ...

  7. load mainaccount

    static void LoadMainAccountCSV(Args _args) { /* SysExcelApplication        excel; SysExcelWorkbooks  ...

  8. WCF框架处理流程初探

    拜读了大牛蒋金楠的<WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构>,写点心得. (原文:http://www.cnblogs.com/artech/archive/20 ...

  9. 解决json日期格式问题的3种方法

    这篇文章主要介绍了解决json日期格式问题的3种方法 ,需要的朋友可以参考下 开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后 ...

  10. 中文api接口

    http://www.bejson.com/knownjson/webInterface/