Swift 學(xué)習(xí)日記 - 3(復(fù)習(xí)與程序相關(guān))

diaryNum += 1          // 新的 Swift 去掉了 ++ 符號(hào)
print "Hello Again捻艳!"
print "Welcome to Swift Learning Diary " + String(diaryNum) + " !"

Welcome to Swift Learning Diary 3 !

點(diǎn)擊進(jìn)入 → Swift 學(xué)習(xí)日志 - 目錄/相關(guān)資料


FollowLight 改進(jìn)

print "Still that Silly!"

Still that Silly!


A new Start

雖說已經(jīng)可以逐漸做一些小的增加和改動(dòng)臭增,但是對(duì)于基礎(chǔ)的掌握依舊需要長時(shí)間的練習(xí)髓窜,一遍遍的訓(xùn)練和掌握捍岳。


使用書籍

「Swift 與 Cocoa 框架開發(fā)」


復(fù)習(xí)

2.1 - 2.5

  • Tuple槐瑞,元組哎壳,將多個(gè)值捆綁到單個(gè)值中
  • 空數(shù)組鸳慈,需要人工指定類型: [Int]()
  • Dictionary, key to value. 不同類型也可以
  • 0 ..< 10 // 0 到 10 不包含 10拂募,for xx in xxxx
    0 … 10 // 0 到 10 包含10
  • lf-let 語句用來檢查一個(gè)可選變量是否包含值
  • 強(qiáng)大的 switch攘滩,根據(jù) Tuple 進(jìn)行切換帅刊,可以編寫非常特別的 case,僅當(dāng)其中一個(gè)組件與條件匹配時(shí)再進(jìn)行

2.6

  • 定義函數(shù)可返回值時(shí)漂问,需要用 “ -> ”
  • 函數(shù)僅可返回一個(gè)值赖瞒,但是通過使用 Tuple,可以將多個(gè)值捆綁放入單個(gè)值中
  • 在參數(shù)名前面放入 “ # ” 號(hào)蚤假,使得內(nèi)部名字和外部名字相同
  • 為函數(shù)單獨(dú)命名了外部名字時(shí)栏饮,調(diào)用時(shí)必須使用這個(gè)外部名稱
  • 可變參數(shù),取值數(shù)目可變磷仰,使用方法像數(shù)組一樣 (僅最有一個(gè)參數(shù)可以是可變參數(shù))
    func sumNumber(numbers: Int...) -> Int { // Int 后面加 ... 表示為可變參數(shù)
    var total = 0
    for number in numbers {
    total += numbers
    }
    return total }
  • inout袍嬉,直接改變這個(gè)變量中儲(chǔ)存的值。用一個(gè)函數(shù)交換兩個(gè)變量灶平。
    func swapValues(inout v1: Int, inout v2: Int) {// 交換兩個(gè)數(shù)的位置}
    swapValues(&num1, &num2)
  • 通過讓函數(shù)捕獲一個(gè)值并多次使用伺通,可以創(chuàng)建用作生成器的函數(shù)(每次調(diào)用時(shí)返回不同值的函數(shù))

2.7

  • 閉包,內(nèi)置 sorted 函數(shù)逢享」藜啵可以接受參數(shù),XCode 可以推斷參數(shù)的類型瞒爬,可以儲(chǔ)存在變量中笑诅,調(diào)用方式與函數(shù)相同
  • 繼承调缨,包含被繼承類(父類)的所有函數(shù)和屬性,只能有一個(gè)父類(C++ 允許多重繼承)吆你。通過 override 可以重寫父類中的函數(shù)弦叶,用 super.xxx 調(diào)用父類中的對(duì)應(yīng)值。
  • 定義計(jì)算屬性:同儲(chǔ)存屬性一樣聲明一個(gè)變量妇多,在后面加入 { 與 }
  • 在屬性發(fā)生變化時(shí)運(yùn)行某些代碼伤哺,向?qū)傩蕴砑?strong>觀察器,屬性后面添加 { 與 }者祖,包含 willSet 和 didSet 代碼塊
  • 惰性屬性:直到首次訪問時(shí)才會(huì)設(shè)定立莉,關(guān)鍵字 lazy
  • 定義協(xié)議:創(chuàng)建一個(gè)屬性和方法清單,與類十分相似七问,但是不提供任何實(shí)際的代碼蜓耻,可以引用任何遵守某一給定協(xié)議的對(duì)象,這個(gè)類的具體類型久無關(guān)緊要了
  • 可以擴(kuò)展任意類型械巡,既可以擴(kuò)展自己編寫的 class刹淌,也可以擴(kuò)展內(nèi)置類型
    情況:向別人編寫的 class 中添加功能,但不能訪問其代碼或不想浪費(fèi)時(shí)間時(shí)
    情況:使用自己編寫的 class讥耗,但希望將其功能劃分到不同部分提高可讀性時(shí)
  • extension 中只能增加計(jì)算屬性有勾,不能增加自己的儲(chǔ)存屬性
  • 將一個(gè)屬性的 setter 聲明為私有的,可以使這個(gè)屬性只讀古程,源文件可以隨便讀取改寫蔼卡,但其他文件只能讀取值
  • 利用泛型可以將 class 的類型設(shè)為一個(gè)可變化參數(shù),在之后的調(diào)用中任何類型都可以(class Tree<T> { })

2.8 - 2.End

  • Objective-C 中使用 Swift挣磨,在對(duì)象前面增加 @objc
  • Swift 中使用 Objective-C, #import
  • 蘋果編寫的書:Using Swift with Cocoa and Objective-C
  • 內(nèi)存托管:使用時(shí)雇逞,放入內(nèi)存中,不再需要時(shí)茁裙,從內(nèi)存中刪除塘砸。引用計(jì)數(shù)是 Swift 中用來跟蹤對(duì)象是否還在使用的技術(shù),將對(duì)象指定給變量時(shí)增加 1呜达,不再指定減少 1谣蠢,降到 0 時(shí)便從內(nèi)存中刪除
  • 需要留意的問題:循環(huán)引用粟耻,兩個(gè)對(duì)象互相引用查近,但未被其他任何部分引用。
  • 弱引用來解決挤忙,一種變量霜威,引用一個(gè)對(duì)象,不改變對(duì)象的引用計(jì)數(shù)(關(guān)鍵字 weak)
  • countElement 可以計(jì)算任意集合中的元素個(gè)數(shù)(數(shù)組册烈,字典)
  • 數(shù)據(jù)模塊:NSData
  • 遵循 NSObject 和 NSCoding 協(xié)議下戈泼,可以將對(duì)象轉(zhuǎn)換為數(shù)據(jù)
  • 模型-視圖-控制器:MVC
  • 將應(yīng)用程序劃分為責(zé)任區(qū)后婿禽,修改將變得更為輕松,通過明確定義哪些對(duì)象負(fù)責(zé)哪些功能大猛,可以更輕松的修改應(yīng)用并使項(xiàng)目結(jié)構(gòu)保持清晰
  • 對(duì)象的委托

應(yīng)用程序

  • Info.plist 非常重要
  • 通過 NSBundle扭倾,無論代碼在哪里,應(yīng)用程序都可以正常工作挽绩,代碼通過這個(gè)類可以知道自己在磁盤上的位置以及如何獲得編譯后的資源

macOS 生命周期

  1. 首先打開 Info.plist膛壹,系統(tǒng)因而知道編譯后的二進(jìn)制文件在哪里并啟動(dòng)
  2. 接口對(duì)象:在設(shè)計(jì)時(shí)準(zhǔn)備的,與應(yīng)用成語一起打包的對(duì)——預(yù)先準(zhǔn)備的窗口唉堪,控件和屏幕模聋。存儲(chǔ)在 nib 文件內(nèi)部。
  3. 從 nib 文件解包一個(gè)對(duì)象時(shí)唠亚,會(huì)發(fā)送 awakeFromNib 消息链方,對(duì)象便可以運(yùn)行代碼。(向 nib 中添加對(duì)象時(shí)便被創(chuàng)建灶搜,保存 nib 時(shí)祟蚀,對(duì)象被冷凍起來,在打開 nib 時(shí)占调,對(duì)象被喚醒暂题,之后便會(huì)發(fā)送消息,讓它知道此時(shí)狀態(tài)已經(jīng)清醒)
  4. 應(yīng)用程序準(zhǔn)備可以運(yùn)行究珊,向應(yīng)用程序委托發(fā)送 applicationDidFinishLaunching 方法薪者。
  5. 進(jìn)行運(yùn)行循環(huán),監(jiān)聽一切發(fā)生的事情
  6. 當(dāng)用戶選擇另一個(gè) APP 時(shí)剿涮,收到 applicationWillResignActive 的消息言津,表示 APP 不再活動(dòng)
  7. 收到 applicationDidResignActive 方法確認(rèn) APP 的確不再活動(dòng)
    分開的原因:切換另一個(gè) APP 時(shí),代碼可以繼續(xù)控制屏幕內(nèi)容的變化取试,再調(diào)用 Will 時(shí)悬槽,程序仍然在屏幕上,當(dāng)不可見時(shí)瞬浓,會(huì)收到 Did 方法
  8. 用戶回歸 APP 時(shí)初婆,收到類似之前的方法,applicationWillBecomeActive 和 applicationDidBecomeActive
  9. 最終退出時(shí)(?Q)猿棉,收到 applicationWillTerminate磅叛,最后一次保存文件的機(jī)會(huì)

iOS 生命周期

與 macOS 區(qū)別:

  • 屏幕一次只能顯示一個(gè)程序
  • 電話,通知欄等會(huì)打斷程序使之變?yōu)楹笈_(tái)程序

生命周期基本相同

  • 程序完成加載后萨赁,增加的參數(shù):Dictionary弊琴,包含了有關(guān)為什么啟動(dòng)程序以及如何啟動(dòng)(點(diǎn)擊,分享杖爽,URL)
  • 關(guān)于 Resign 方法敲董,macOS 上時(shí) NSNotification 對(duì)象紫皇,而 iOS 上為 UIApplication

退出時(shí)的變化,多任務(wù):

  • 按主屏幕按鈕退出后腋寨,程序被掛起聪铺,停止執(zhí)行代碼,內(nèi)存被鎖定
  • 程序仍在內(nèi)存中萄窜,沒有退出但停止消耗 CPU 及其他硬件資源
  • 當(dāng)開啟的程序需要更多的內(nèi)存時(shí)计寇,程序被終止,不作任何通知
  • applicationWillEnterBackground 在程序被移到后臺(tái)后立即被調(diào)用脂倦,程序應(yīng)該在這個(gè)時(shí)候保存所有數(shù)據(jù)
  • applicationWillEnterForeground 在程序即將回到屏幕上之前被調(diào)用
  • 通過減少程序所用的內(nèi)存(釋放大的對(duì)象番宁,卸載圖像等)來降低被終止的可能性
  • 將內(nèi)存降到 16MB 一下:低于這個(gè)量額程序會(huì)被存儲(chǔ)在閃存中,從內(nèi)存中徹底移出赖阻,當(dāng)程序恢復(fù)時(shí)蝶押,再次從閃存芯片的存儲(chǔ)內(nèi)存中重新加載,因此火欧,不會(huì)因?yàn)槠渌麘?yīng)用的內(nèi)存需求而將程序從內(nèi)存中去除
  • 程序可以申請(qǐng)?jiān)诤笈_(tái)段時(shí)間運(yùn)行棋电,不超過 10 分鐘,為了讓程序完成一個(gè)需要長時(shí)間運(yùn)行的過程(將大型文件寫回磁盤苇侵,完成下載等)赶盔,時(shí)間結(jié)束后,程序需要告訴 iOS 已完成或者將被終止(不是掛扔芘ā)
  • 后臺(tái)獲取與后臺(tái)通知的增加于未,需要專門開啟,設(shè)定的最短間隔喚醒時(shí)間并不一定被 iOS 采納陡鹃,iOS 會(huì)有自己的機(jī)制來避免不必要的損耗
  • 音頻類應(yīng)用可以在后臺(tái)持續(xù)播放烘浦;后臺(tái)跟蹤位置的應(yīng)用可以運(yùn)行任意長時(shí)間;網(wǎng)際協(xié)議電話(VoIP)可以定期運(yùn)行

沙盒機(jī)制

  • iOS 中一定存在萍鲸,無法抉擇
  • macOS 之前可以選擇闷叉,現(xiàn)在一定需要(mac app story 不接受非沙盒的,因此更多的開發(fā)商選擇了官網(wǎng)直接發(fā)售而不是商家 MAS)

沙盒可以將系統(tǒng)級(jí)的文件被隔絕出來避免各種安全性的問題脊阴,哪怕軟件用可以被利用的 bug握侧,因?yàn)樯澈械南拗疲琅f不能改變系統(tǒng)性的東西嘿期,所以杜絕了安全性的問題

  • 不可使用私有 API品擎,只能使用文檔中已經(jīng)表明的

About 關(guān)于

這是我的 Swift 學(xué)習(xí)日記,并不是什么高深莫測的玩意兒秽五,只是為了記錄以便日后鞏固等孽查。

/ by Ulysses
/ by o1xhack (wyx)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饥悴,一起剝皮案震驚了整個(gè)濱河市坦喘,隨后出現(xiàn)的幾起案子盲再,更是在濱河造成了極大的恐慌,老刑警劉巖瓣铣,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件答朋,死亡現(xiàn)場離奇詭異,居然都是意外死亡棠笑,警方通過查閱死者的電腦和手機(jī)梦碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓖救,“玉大人洪规,你說我怎么就攤上這事⊙啵” “怎么了斩例?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長从橘。 經(jīng)常有香客問我念赶,道長,這世上最難降的妖魔是什么恰力? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任叉谜,我火速辦了婚禮,結(jié)果婚禮上踩萎,老公的妹妹穿的比我還像新娘停局。我一直安慰自己,他們只是感情好香府,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布翻具。 她就那樣靜靜地躺著,像睡著了一般回还。 火紅的嫁衣襯著肌膚如雪裆泳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天柠硕,我揣著相機(jī)與錄音工禾,去河邊找鬼。 笑死蝗柔,一個(gè)胖子當(dāng)著我的面吹牛闻葵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播癣丧,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼槽畔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胁编?” 一聲冷哼從身側(cè)響起厢钧,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鳞尔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后早直,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寥假,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年霞扬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糕韧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喻圃,死狀恐怖萤彩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斧拍,我是刑警寧澤乒疏,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站饮焦,受9級(jí)特大地震影響怕吴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜县踢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一转绷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硼啤,春花似錦议经、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗓袱,卻和暖如春籍救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渠抹。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工蝙昙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梧却。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓奇颠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親放航。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烈拒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容