这节课需要讲的就是可选链,内存管理,引用计数,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. MYSQL 锁机制 分析

    MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table WriteLock).MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执 ...

  2. Serif和Sans-serif字体的区别

    在西方国家罗马字母阵营中,字体分为两大种类:Sans Serif和Serif,打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类,例如在Web中,表示代 ...

  3. jquery 监听所有锚点链接实现平滑移动

    jquery 监听所有锚点链接实现平滑移动,地址栏上不会改变链接地址 //监听所有锚点链接实现平滑移动 $('a[href*=#],area[href*=#]').click(function() { ...

  4. 关于Memcached一致性hash的探究

    参考文章 http://blog.chinaunix.net/uid-20498361-id-4303232.html http://blog.csdn.net/kongqz/article/deta ...

  5. sklearn学习笔记1

    Image recognition with Support Vector Machines #our dataset is provided within scikit-learn #let's s ...

  6. 实例存储支持的AMI创建步骤

    实例存储支持的AMI创建步骤 一.Windows AMI 1. 选择实例存储支持的AMI创建实例. 2. 远程登录实例进行定制化配置. 3. 通过Web控制台或命令行Bundle实例(并自动上传到S3 ...

  7. 从jQuery源码阅读看 dom load

    最近两天不忙的时候再回过来研究一下jquery的源码,看到$(document).ready()时,深入的研究了一下dom的加载问题. 我们都知道,window.onload可以解决我们的js执行时机 ...

  8. MVC @Html.DropDownList()绑定值

    Controller中: ViewBag.modules = new SelectList(集合.ToList(), "下拉框键", "下拉框值"); View ...

  9. Node.js 自学之旅

    学习基础,JQuery 原生JS有一定基础,有自己一定技术认知(ps:原型链依然迷糊中.闭包6不起来!哎!) 当然最好有语言基础,C#,java,PHP等等.. 最初学习这个东西的原因很简单,在园子里 ...

  10. ios 设置声音和震动,单独控制

    一.今天项目中涉及了设置这快的声音震动和响铃,搞的头大,以前搞过,只是简单的调用系统的方法就可以实现,但是现在的公司要求,震动是震动,响铃是响铃,我看了微信,微信也是的分开的,做的很好,但是我就纳闷了 ...