二,在協(xié)議中的時候 可以把協(xié)議充當(dāng)成類
is判斷:是否遵守了該協(xié)議
as轉(zhuǎn)換 :轉(zhuǎn)換成該協(xié)議的對象,并且只能調(diào)用協(xié)議的方法
is判斷:是否遵守了該協(xié)議
as轉(zhuǎn)換 :轉(zhuǎn)換成該協(xié)議的對象,并且只能調(diào)用協(xié)議的方法
2019-01-18
其實這種初始化有點像一個類幫另一個類初始化了,小的那個類被大的引用著。china?.CapitalCity.Country這樣調(diào)用有點奇怪。
2019-01-17
樓下說沒有關(guān)系其實還是有關(guān)系的,當(dāng)雙方初始化的完成都需要對方的時候,而且雙方屬性都是let和不能為空,這時候就需要用到unowned加上!屬性來解決了。
2019-01-17
Swift內(nèi)存管理筆記
一,一個對象是有生命周期的 , 它創(chuàng)建的時候在內(nèi)存開辟的一個存儲空間,消失的時候(賦值nil或作用域結(jié)束)會調(diào)用deinit方法,就像OC的dealloc 和 C++的析構(gòu)一樣
二,一個對象在{}里面的創(chuàng)建,在括號邏輯做完后就會消失。就如函數(shù)執(zhí)行完或者for{}執(zhí)行完就會消失 這些都是系統(tǒng)幫我們做的
三,當(dāng)一個對象被其他對象引用或擁有的時候(在某個括號內(nèi),而且括號沒有執(zhí)行完),他的引用計數(shù)器加一。不管創(chuàng)建者引用是否還在,只要該對象引用計數(shù)不為0,他就不會被釋放。
一,一個對象是有生命周期的 , 它創(chuàng)建的時候在內(nèi)存開辟的一個存儲空間,消失的時候(賦值nil或作用域結(jié)束)會調(diào)用deinit方法,就像OC的dealloc 和 C++的析構(gòu)一樣
二,一個對象在{}里面的創(chuàng)建,在括號邏輯做完后就會消失。就如函數(shù)執(zhí)行完或者for{}執(zhí)行完就會消失 這些都是系統(tǒng)幫我們做的
三,當(dāng)一個對象被其他對象引用或擁有的時候(在某個括號內(nèi),而且括號沒有執(zhí)行完),他的引用計數(shù)器加一。不管創(chuàng)建者引用是否還在,只要該對象引用計數(shù)不為0,他就不會被釋放。
2019-01-17
先使用一個協(xié)議封裝起來一些必須完成這個委托任務(wù)必須要實現(xiàn)的方法,如游戲的規(guī)則和tableview的行數(shù)。
創(chuàng)建一個類,里面有個delegate的屬性,這個delegate必須遵守協(xié)議。類內(nèi)部使用delegate實現(xiàn)任務(wù)內(nèi)部的邏輯,如游戲如何進(jìn)行和tableview如何通過代理的函數(shù)去布局,這些邏輯被委托方都不需要知道。
當(dāng)某個類需要成為委托方的時候,把這個delegate賦值給這個類,并在里面實現(xiàn)協(xié)議的方法,如tableView的屬性或游戲規(guī)則,這就完成了委托的任務(wù)了。
創(chuàng)建一個類,里面有個delegate的屬性,這個delegate必須遵守協(xié)議。類內(nèi)部使用delegate實現(xiàn)任務(wù)內(nèi)部的邏輯,如游戲如何進(jìn)行和tableview如何通過代理的函數(shù)去布局,這些邏輯被委托方都不需要知道。
當(dāng)某個類需要成為委托方的時候,把這個delegate賦值給這個類,并在里面實現(xiàn)協(xié)議的方法,如tableView的屬性或游戲規(guī)則,這就完成了委托的任務(wù)了。
2019-01-17
為什么Struct中函數(shù)改變屬性要加mutating呢! 因為struct是屬于值類型的, 當(dāng)新值傳入 它需要拷貝一個新的副本去防止副本的修改影響到原屬性,所以在覆蓋原屬性的操作中系統(tǒng)不知道這個新的副本要放在那里,所以加上mutating系統(tǒng)就知道這是一個覆蓋操作 不應(yīng)該開一個新的副本
2019-01-15
半個月看完,2018.11.26 打卡!感謝bobo老師的視頻,講的非常好!
2018-11-26