Swift 学习日记 - 3(复习与程序相关)

diaryNum += 1          // 新的 Swift 去掉了 ++ 符号
print "Hello Again!"
print "Welcome to Swift Learning Diary " + String(diaryNum) + " !"

Welcome to Swift Learning Diary 3 !

点击进入 → Swift 学习日志 - 目录/相关资料


FollowLight 改进

print "Still that Silly!"

Still that Silly!


A new Start

虽说已经可以逐渐做一些小的增加和改动,但是对于基础的掌握依旧需要长时间的练习,一遍遍的训练和掌握。


使用书籍

「Swift 与 Cocoa 框架开发」


复习

2.1 - 2.5

  • Tuple,元组,将多个值捆绑到单个值中
  • 空数组,需要人工指定类型: [Int]()
  • Dictionary, key to value. 不同类型也可以
  • 0 ..< 10 // 0 到 10 不包含 10,for xx in xxxx
    0 … 10 // 0 到 10 包含10
  • lf-let 语句用来检查一个可选变量是否包含值
  • 强大的 switch,根据 Tuple 进行切换,可以编写非常特别的 case,仅当其中一个组件与条件匹配时再进行

2.6

  • 定义函数可返回值时,需要用 “ -> ”
  • 函数仅可返回一个值,但是通过使用 Tuple,可以将多个值捆绑放入单个值中
  • 在参数名前面放入 “ # ” 号,使得内部名字和外部名字相同
  • 为函数单独命名了外部名字时,调用时必须使用这个外部名称
  • 可变参数,取值数目可变,使用方法像数组一样 (仅最有一个参数可以是可变参数)
    func sumNumber(numbers: Int...) -> Int { // Int 后面加 ... 表示为可变参数
    var total = 0
    for number in numbers {
    total += numbers
    }
    return total }
  • inout,直接改变这个变量中储存的值。用一个函数交换两个变量。
    func swapValues(inout v1: Int, inout v2: Int) {// 交换两个数的位置}
    swapValues(&num1, &num2)
  • 通过让函数捕获一个值并多次使用,可以创建用作生成器的函数(每次调用时返回不同值的函数)

2.7

  • 闭包,内置 sorted 函数。可以接受参数,XCode 可以推断参数的类型,可以储存在变量中,调用方式与函数相同
  • 继承,包含被继承类(父类)的所有函数和属性,只能有一个父类(C++ 允许多重继承)。通过 override 可以重写父类中的函数,用 super.xxx 调用父类中的对应值。
  • 定义计算属性:同储存属性一样声明一个变量,在后面加入 { 与 }
  • 在属性发生变化时运行某些代码,向属性添加观察器,属性后面添加 { 与 },包含 willSet 和 didSet 代码块
  • 惰性属性:直到首次访问时才会设定,关键字 lazy
  • 定义协议:创建一个属性和方法清单,与类十分相似,但是不提供任何实际的代码,可以引用任何遵守某一给定协议的对象,这个类的具体类型久无关紧要了
  • 可以扩展任意类型,既可以扩展自己编写的 class,也可以扩展内置类型
    情况:向别人编写的 class 中添加功能,但不能访问其代码或不想浪费时间时
    情况:使用自己编写的 class,但希望将其功能划分到不同部分提高可读性时
  • extension 中只能增加计算属性,不能增加自己的储存属性
  • 将一个属性的 setter 声明为私有的,可以使这个属性只读,源文件可以随便读取改写,但其他文件只能读取值
  • 利用泛型可以将 class 的类型设为一个可变化参数,在之后的调用中任何类型都可以(class Tree<T> { })

2.8 - 2.End

  • Objective-C 中使用 Swift,在对象前面增加 @objc
  • Swift 中使用 Objective-C, #import
  • 苹果编写的书:Using Swift with Cocoa and Objective-C
  • 内存托管:使用时,放入内存中,不再需要时,从内存中删除。引用计数是 Swift 中用来跟踪对象是否还在使用的技术,将对象指定给变量时增加 1,不再指定减少 1,降到 0 时便从内存中删除
  • 需要留意的问题:循环引用,两个对象互相引用,但未被其他任何部分引用。
  • 弱引用来解决,一种变量,引用一个对象,不改变对象的引用计数(关键字 weak)
  • countElement 可以计算任意集合中的元素个数(数组,字典)
  • 数据模块:NSData
  • 遵循 NSObject 和 NSCoding 协议下,可以将对象转换为数据
  • 模型-视图-控制器:MVC
  • 将应用程序划分为责任区后,修改将变得更为轻松,通过明确定义哪些对象负责哪些功能,可以更轻松的修改应用并使项目结构保持清晰
  • 对象的委托

应用程序

  • Info.plist 非常重要
  • 通过 NSBundle,无论代码在哪里,应用程序都可以正常工作,代码通过这个类可以知道自己在磁盘上的位置以及如何获得编译后的资源

macOS 生命周期

  1. 首先打开 Info.plist,系统因而知道编译后的二进制文件在哪里并启动
  2. 接口对象:在设计时准备的,与应用成语一起打包的对——预先准备的窗口,控件和屏幕。存储在 nib 文件内部。
  3. 从 nib 文件解包一个对象时,会发送 awakeFromNib 消息,对象便可以运行代码。(向 nib 中添加对象时便被创建,保存 nib 时,对象被冷冻起来,在打开 nib 时,对象被唤醒,之后便会发送消息,让它知道此时状态已经清醒)
  4. 应用程序准备可以运行,向应用程序委托发送 applicationDidFinishLaunching 方法。
  5. 进行运行循环,监听一切发生的事情
  6. 当用户选择另一个 APP 时,收到 applicationWillResignActive 的消息,表示 APP 不再活动
  7. 收到 applicationDidResignActive 方法确认 APP 的确不再活动
    分开的原因:切换另一个 APP 时,代码可以继续控制屏幕内容的变化,再调用 Will 时,程序仍然在屏幕上,当不可见时,会收到 Did 方法
  8. 用户回归 APP 时,收到类似之前的方法,applicationWillBecomeActive 和 applicationDidBecomeActive
  9. 最终退出时(⌘Q),收到 applicationWillTerminate,最后一次保存文件的机会

iOS 生命周期

与 macOS 区别:

  • 屏幕一次只能显示一个程序
  • 电话,通知栏等会打断程序使之变为后台程序

生命周期基本相同

  • 程序完成加载后,增加的参数:Dictionary,包含了有关为什么启动程序以及如何启动(点击,分享,URL)
  • 关于 Resign 方法,macOS 上时 NSNotification 对象,而 iOS 上为 UIApplication

退出时的变化,多任务:

  • 按主屏幕按钮退出后,程序被挂起,停止执行代码,内存被锁定
  • 程序仍在内存中,没有退出但停止消耗 CPU 及其他硬件资源
  • 当开启的程序需要更多的内存时,程序被终止,不作任何通知
  • applicationWillEnterBackground 在程序被移到后台后立即被调用,程序应该在这个时候保存所有数据
  • applicationWillEnterForeground 在程序即将回到屏幕上之前被调用
  • 通过减少程序所用的内存(释放大的对象,卸载图像等)来降低被终止的可能性
  • 将内存降到 16MB 一下:低于这个量额程序会被存储在闪存中,从内存中彻底移出,当程序恢复时,再次从闪存芯片的存储内存中重新加载,因此,不会因为其他应用的内存需求而将程序从内存中去除
  • 程序可以申请在后台段时间运行,不超过 10 分钟,为了让程序完成一个需要长时间运行的过程(将大型文件写回磁盘,完成下载等),时间结束后,程序需要告诉 iOS 已完成或者将被终止(不是挂取)
  • 后台获取与后台通知的增加,需要专门开启,设定的最短间隔唤醒时间并不一定被 iOS 采纳,iOS 会有自己的机制来避免不必要的损耗
  • 音频类应用可以在后台持续播放;后台跟踪位置的应用可以运行任意长时间;网际协议电话(VoIP)可以定期运行

沙盒机制

  • iOS 中一定存在,无法抉择
  • macOS 之前可以选择,现在一定需要(mac app story 不接受非沙盒的,因此更多的开发商选择了官网直接发售而不是商家 MAS)

沙盒可以将系统级的文件被隔绝出来避免各种安全性的问题,哪怕软件用可以被利用的 bug,因为沙盒的限制,它依旧不能改变系统性的东西,所以杜绝了安全性的问题

  • 不可使用私有 API,只能使用文档中已经表明的

About 关于

这是我的 Swift 学习日记,并不是什么高深莫测的玩意儿,只是为了记录以便日后巩固等。

/ by Ulysses
/ by o1xhack (wyx)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容