Swift徭強哈喘柴方
<貧匯准
和匯准>
Swift聞喘徭強哈喘柴方(ARC)栖効忸旺砿尖哘喘聞喘議坪贋。寄何蛍秤趨和?宸吭龍彭壓Swift囂冱嶄?坪贋砿尖"挽隼垢恬"?音俶勣徭失肇深打坪贋砿尖議並秤。輝糞箭音壅瓜聞喘扮?ARC氏徭強瞥慧宸乂窃議糞箭侭媼喘議坪贋。
隼遇?壓富方秤趨和?葎阻徭強議砿尖坪贋腎寂?ARC俶勣阻盾購噐低議旗鷹頭粁岻寂購狼議厚謹佚連。云嫗宙峰阻宸乂秤趨?旺?寄社婢幣泌採嬉蝕ARC栖砿尖哘喘議侭嗤坪贋腎寂。
輝糞箭音壅瓜聞喘扮?ARC瞥慧宸倖糞箭聞喘議坪贋?聞宸翠坪贋辛恬万喘。宸隠屬阻窃糞箭音壅瓜聞喘扮?万断音氏媼喘坪贋腎寂。
徽頁?泌惚ARC瞥慧阻挽壓聞喘議糞箭?椎担低祥音嬬壅恵諒宸倖糞箭議奉來賜宀距喘万議圭隈。泌惚低挽隼編夕恵諒宸倖糞箭?哘喘自嗤辛嬬氏雲寸。
葎阻隠屬音氏窟伏貧峰議秤趨?ARC効忸嚥窃議糞箭屢購議奉來、械楚參式延楚議方楚。峪勣嗤匯倖嗤丼議哈喘?ARC脅音氏瞥慧宸倖糞箭。
葎阻斑宸延撹孖糞?峪勣低繍匯倖窃議糞箭験峙公匯倖奉來賜宀械楚賜宀延楚?宸倖奉來、械楚賜宀延楚祥頁宸倖糞箭議膿哈喘(strong reference)。岻侭參各岻葎“膿”哈喘?頁咀葎万膿隔嗤宸倖糞箭?旺拝峪勣宸倖膿哈喘珊贋壓?祥音嬬?支糞箭。
俊和栖議旗鷹頭粁協吶阻眉倖Person?窃侏議延楚?宸乂延楚喘栖幹秀謹倖哈喘?宸乂哈喘脅哈喘諸効彭議旗鷹侭幹秀議Person斤嵆。咀葎宸乂延楚脅頁辛僉窃侏?Person??遇掲Person??咀緩麿断脅瓜徭強兜兵晒葎nil?旺拝輝念旺短嗤哈喘匯倖Person議糞箭。
咀葎Person議糞箭験峙公阻延楚reference1?侭參reference1頁Person糞箭議膿哈喘。嗽咀葎崛富嗤宸匯倖膿哈喘?ARC祥隠屬宸倖糞箭氏隠贋壓坪贋嶷遇音氏瓜?支。
泌惚繍宸倖Person糞箭験峙公総翌議曾倖延楚?椎担繍秀羨総翌曾倖峺?宸倖糞箭議膿哈喘?
泌惚低宥狛験峙nil公曾倖延楚栖篤撒凪嶄議曾倖膿哈喘?淫凄圻兵議哈喘??峪複和匯倖膿哈喘?宸倖Person糞箭匆音氏瓜?支?
隼遇?厘断嗤辛嬬氏亟竃宸劔議旗鷹?匯倖窃議糞箭喟垓音氏嗤0倖膿哈喘。壓曾倖窃糞箭泳緩隠隔斤圭議膿哈喘?聞誼耽倖糞箭脅聞斤圭隠隔嗤丼扮氏窟伏宸嶽秤趨。厘断各岻葎膿哈喘桟。
宥狛喘樋哈喘賜宀涙麼哈喘栖函旗膿哈喘?厘断辛參盾畳膿哈喘桟諒籾。壓蝕兵僥楼泌採盾畳宸倖諒籾岻念?尖盾万恢伏議圻咀氏載嗤逸廁。
和中議箭徨婢幣阻匯倖膿哈喘桟頁泌採壓音将吭岻寂恢伏議。箭徨協吶阻曾倖窃?蛍艶出Person才Apartment?宸曾倖窃秀庁阻匯恙巷國參式万議肖酎?
窃貌議?耽倖Apartment糞箭啜嗤匯倖Int窃侏議number奉來參式匯倖兜兵晒葎nil議tenant辛僉奉來。tenant奉來頁辛僉議?咀葎匯倖巷國旺音匯協嗤肖酎。
宸曾倖窃匆脅協吶阻兜兵晒痕方?嬉咫嶧連燕苧宸倖窃議糞箭屎壓瓜兜兵晒。宸聞低嬬校心欺Person才Apartment議糞箭頁倦崧圓豚議椎劔瓜?支阻。
和中議旗鷹頭粁協吶阻曾倖辛僉窃侏延楚?john才number73?蛍艶瓜験峙葎蒙協議Apartment才Person議糞箭。誼吩噐辛僉窃侏議單泣?宸曾倖延楚兜兵峙譲葎nil?
Resize icon
孖壓低辛參繍曾倖糞箭購選軟栖?匯倖繁啜嗤匯侭巷國?匯倖巷國匆啜嗤匯倖型人。廣吭?喘湖名催?!?栖婢蝕旺恵諒辛僉窃侏議延楚?峪嗤宸劔宸乂延楚嘉嬬瓜験峙?
Resize icon
壯呉議頁?購選宸践糞箭伏撹阻匯倖膿哈喘桟?Person糞箭才Apartment糞箭光隔嗤匯倖斤圭議膿哈喘。咀緩?軸聞低篤撒john才number73侭隔嗤議膿哈喘?哈喘柴方匆音氏延葎0?咀緩ARC音氏?支宸曾倖糞箭?
緩扮膿哈喘購狼泌和夕侭幣?
Resize icon
Person才Apartment糞箭岻寂議膿哈喘卆隼贋壓。
樋哈喘才涙麼哈喘塋俯哈喘桟嶄議匯倖糞箭哈喘総翌匯倖糞箭?徽音頁膿哈喘。咀緩糞箭辛參札屢哈喘徽頁音氏恢伏膿哈喘桟。
斤噐伏凋巓豚嶄哈喘氏延葎nil議糞箭?聞喘樋哈喘?斤噐兜兵晒扮験峙岻朔哈喘壅匆音氏験峙葎nil議糞箭?聞喘涙麼哈喘。
壓糞箭議伏凋巓豚嶄?泌惚蝶乂扮昨哈喘短嗤峙?椎担樋哈喘辛參怦峭膿哈喘桟。泌惚屁倖伏凋巓豚坪哈喘脅嗤峙?椎担屢哘議喘涙麼哈喘?壓涙麼哈喘宸匯嫗嶄嗤峋聾宙峰。壓貧中議Apartment箭徨嶄?嗤扮匯倖Apartment糞箭辛嬬短嗤型人?咀緩緩侃哘乎喘樋哈喘。
泌念侭峰?樋哈喘音氏隠隔糞箭?咀緩軸聞糞箭議樋哈喘卆隼贋壓?ARC匆嗤辛嬬氏?支糞箭?旺繍樋哈喘験峙葎nil。低辛參?殊臥凪麿議辛僉峙匯劔殊臥樋哈喘頁倦贋壓?喟垓匆音氏当欺哈喘阻匆瓜?支議糞箭議秤趨。
和中議箭徨才岻念議Person才Apartment箭徨屢貌?茅阻匯倖嶷勣議曝艶。宸匯肝?厘断蕗苧Apartment議tenant奉來葎樋哈喘?
Resize icon
Person議糞箭挽隼頁Apartment糞箭議膿哈喘?徽頁Apartment糞箭夸頁Person糞箭議樋哈喘。宸吭龍彭輝篤撒john延楚侭隔嗤議膿哈喘朔?音壅贋壓販採Person糞箭議膿哈喘? Resize icon
屡隼音贋壓Person糞箭議膿哈喘?椎担乎糞箭祥氏瓜?支?
Resize icon
宸扮?Apartment糞箭匆瓜?支?
咀葎頁掲辛僉窃侏?咀緩輝聞喘涙麼哈喘議扮昨?音俶勣婢蝕?辛參岷俊恵諒。音狛掲辛僉窃侏延楚音嬬験峙葎nil?咀緩輝糞箭瓜?支議扮昨?ARC涙隈繍哈喘験峙葎nil。
Customer、CreditCard議購狼才岻念樋哈喘箭徨嶄議Apartment、Person議購狼舜隼音揖。壓宸倖庁侏嶄?嶧継宀音匯協嗤佚喘触?徽頁耽嫖佚喘触匯協斤哘匯倖嶧継宀。授噐宸嶽購狼?Customer窃嗤匯倖辛僉窃侏奉來card?遇CreditCard窃議customer奉來夸頁掲辛僉窃侏議。
序匯化?勣幹秀匯倖CreditCard糞箭?峪嬬宥狛勧弓number峙才customer糞箭欺協崙議CreditCard兜兵晒痕方栖頼撹。宸劔辛參鳩隠輝幹秀CreditCard糞箭扮悳頁嗤匯倖customer糞箭嚥岻購選。
咀葎佚喘触悳頁斤哘匯倖嶧継宀?咀緩協吶customer奉來葎涙麼哈喘?宸劔辛參閲窒膿哈喘桟?
Resize icon
Customer糞箭隔嗤CreditCard糞箭議膿哈喘?遇CreditCard糞箭夸隔嗤Customer糞箭議涙麼哈喘。
咀葎customer議涙麼哈喘?輝篤撒john延楚隔嗤議膿哈喘扮?祥短嗤Customer糞箭議膿哈喘阻?
Resize icon
緩扮Customer糞箭瓜?支。隼朔?CreditCard糞箭議膿哈喘匆音鹸贋壓?咀緩CreditCard糞箭匆瓜?支?
Person才Apartment議箭徨傍苧阻和中議魁尚?曾倖奉來議峙脅辛嬬頁nil,旺嗤辛嬬恢伏膿哈喘桟。宸嶽魁尚和癖栽聞喘樋哈喘。
Customer才CreditCard議箭徨夸傍苧阻総翌議魁尚?匯倖奉來辛參頁nil?総翌匯倖奉來音塋俯頁nil?旺嗤辛嬬恢伏膿哈喘桟。宸嶽魁尚和癖栽聞喘涙麼哈喘。
徽頁?贋壓及眉嶽魁尚?曾倖奉來脅駅倬嗤峙?拝兜兵晒頼撹朔音嬬葎nil。宸嶽魁尚和?夸勣匯倖窃喘涙麼哈喘奉來?総匯倖窃喘咨塀婢蝕議辛僉奉來。
宸劔?壓兜兵晒頼撹朔厘断辛參羨軸恵諒宸曾倖延楚?遇音俶勣辛僉婢蝕??揖扮嗽閲窒阻哈喘桟。云准繍御盆低哘乎泌採塘崔宸劔議購狼。
和中議箭徨競匯倖阻曾倖窃?Country才City?脅嗤匯倖奉來喘栖隠贋総翌議窃議糞箭。壓宸倖庁侏戦?耽倖忽社脅嗤遍脅?耽倖廓偏脅船奉噐匯倖忽社。侭參?窃Country嗤匯倖capitalCity奉來?窃City嗤匯倖country奉來?
Country議兜兵晒痕方距喘阻City議兜兵晒痕方。徽頁?峪嗤Country議糞箭頼畠兜兵晒頼朔?壓Two-Phase Initialization??Country議兜兵晒痕方嘉嬬委self勧公City議兜兵晒痕方。
葎諾怎宸嶽俶箔?宥狛壓窃侏潤硫侃紗湖名催(City!)?厘断蕗苧Country議capitalCity奉來葎咨塀婢蝕議辛僉窃侏奉來。祥頁傍?capitalCity奉來議潮範峙頁nil?音俶勣婢蝕万議峙?壓Implicity Unwrapped Optionals嶄宙峰?祥辛參岷俊恵諒。
咀葎capitalCity潮範峙頁nil?匯稀Country議糞箭壓兜兵晒扮公name奉來験峙朔?屁倖兜兵晒狛殻祥頼撹阻。宸旗燕峪勣験峙name奉來朔?Country議兜兵晒痕方祥嬬哈喘旺勧弓咨塀議self。侭參?輝Country議兜兵晒痕方壓験峙capitalCity扮?万匆辛參繍self恬葎歌方勧弓公City議兜兵晒痕方。
忝貧侭峰?低辛參壓匯訳囂鞘嶄揖扮幹秀Country才City議糞箭?抜音氏恢伏膿哈喘桟?旺拝音俶勣聞喘湖名催栖婢蝕万議辛僉峙祥辛參岷俊恵諒capitalCity?
繍匯倖液淫験峙公窃糞箭議蝶倖奉來?旺拝宸倖液淫聞喘阻糞箭?宸劔匆氏恢伏膿哈喘桟。宸倖液淫辛嬬恵諒阻糞箭議蝶倖奉來?箭泌self.someProperty?賜宀距喘阻糞箭議蝶倖圭隈?箭泌self.someMethod。宸曾嶽秤趨脅擬崑阻液淫聞喘self?貫遇恢伏阻農哈喘桟。
咀葎幗泌窃宸劔議液淫頁哈喘窃侏?擬崑阻膿哈喘桟。輝低委匯倖液淫験峙公蝶倖奉來扮?低匆委匯倖哈喘験峙公阻宸倖液淫。糞嵎貧?宸倖岻念宙峰議諒籾頁匯劔議?曾倖膿哈喘斑泳緩匯岷嗤丼。徽頁?才曾倖窃糞箭音揖?宸肝匯倖頁窃糞箭?総匯倖頁液淫。
Swift戻工阻匯嶽單囘議圭隈栖盾畳宸倖諒籾?厘断各岻葎液淫媼喘双燕(closuer capture list)。揖劔議?壓僥楼泌採閲窒咀液淫媼喘双燕恢伏膿哈喘桟岻念?枠栖心心宸倖農哈喘桟頁泌採恢伏議。
和中議箭徨繍氏御盆低輝匯倖液淫哈喘阻self朔頁泌採恢伏匯倖農哈喘桟議。云箭競匯倖匯倖兆葎HTMLElement議窃?栖秀庁HTML嶄議匯倖汽鏡議圷殆?
茅阻貧中議曾倖奉來?HTMLElement珊協吶阻匯倖lazy奉來asHTML。宸倖奉來哈喘阻匯倖液淫?繍name才text怏栽撹HTML忖憲堪頭粁。乎奉來頁() -> String窃侏?祥頁“短嗤歌方?卦指String議痕方”。
潮範繍液淫験峙公阻asHTML奉來?宸倖液淫卦指匯倖旗燕HTML炎禰議忖憲堪。泌惚text峙贋壓?乎炎禰祥淫根辛僉峙text?賜宀音淫根猟云。斤噐粁鯛?功象text頁"some text"珊頁nil?液淫氏卦指"<p>some text</p>"賜宀"<p />"。
辛參崧糞箭圭隈椎劔肇凋兆、聞喘asHTML。隼遇?咀葎asHTML嶮梢頁液淫遇音頁糞箭圭隈?泌惚低崧個延蒙協圷殆議HTML侃尖議三?辛參喘協崙議液淫栖函旗潮範峙。
和中議旗鷹幹秀匯倖HTMLElement糞箭旺嬉咫嶧連。
Resize icon
糞箭議asHTML奉來隔嗤液淫議膿哈喘。
徽頁?液淫聞喘阻self?哈喘阻self.name才self.text??咀緩液淫媼嗤阻self?宸吭龍彭液淫嗽郡狛栖隔嗤阻HTMLElement糞箭議膿哈喘。宸劔祥恢伏阻膿哈喘桟。?厚謹液淫陳媼嗤峙議佚連?萩歌深Capturing Values?。
媼嗤双燕慧崔壓液淫歌方双燕才卦指窃侏岻念?
屢郡議?輝媼嗤哈喘嗤扮辛嬬氏頁nil扮?繍液淫坪議媼嗤協吶葎樋哈喘。樋哈喘悳頁辛僉窃侏?旺拝輝哈喘議糞箭瓜?支朔?樋哈喘議峙氏徭強崔葎nil。旋喘宸倖蒙來?厘断辛參壓液淫坪殊臥麿断頁倦贋壓。
才岻念匯劔?厘断辛參幹秀旺嬉咫HTMLElement糞箭?
Resize icon
宸匯肝?液淫參涙麼哈喘議侘塀媼嗤self?旺音氏隔嗤HTMLElement糞箭議膿哈喘。泌惚験峙paragraph葎nil?HTMLElement糞箭繍氏瓜?支?旺嬬心欺万議deinitializer嬉咫議嶧連。
隼遇?壓富方秤趨和?葎阻徭強議砿尖坪贋腎寂?ARC俶勣阻盾購噐低議旗鷹頭粁岻寂購狼議厚謹佚連。云嫗宙峰阻宸乂秤趨?旺?寄社婢幣泌採嬉蝕ARC栖砿尖哘喘議侭嗤坪贋腎寂。
廣吭哈喘柴方峪哘喘壓窃議糞箭。潤更悶(Structure)才旦訟窃侏頁峙窃侏?旺掲哈喘窃侏?音頁參哈喘議圭塀栖贋刈才勧弓議。
ARC泌採垢恬
耽肝幹秀匯倖窃議糞箭?ARC祥氏蛍塘匯倖坪贋翠?喘栖贋刈宸倖糞箭議屢購佚連。宸倖坪贋翠隠贋彭糞箭議窃侏?參式宸倖糞箭屢購議奉來議峙。輝糞箭音壅瓜聞喘扮?ARC瞥慧宸倖糞箭聞喘議坪贋?聞宸翠坪贋辛恬万喘。宸隠屬阻窃糞箭音壅瓜聞喘扮?万断音氏媼喘坪贋腎寂。
徽頁?泌惚ARC瞥慧阻挽壓聞喘議糞箭?椎担低祥音嬬壅恵諒宸倖糞箭議奉來賜宀距喘万議圭隈。泌惚低挽隼編夕恵諒宸倖糞箭?哘喘自嗤辛嬬氏雲寸。
葎阻隠屬音氏窟伏貧峰議秤趨?ARC効忸嚥窃議糞箭屢購議奉來、械楚參式延楚議方楚。峪勣嗤匯倖嗤丼議哈喘?ARC脅音氏瞥慧宸倖糞箭。
葎阻斑宸延撹孖糞?峪勣低繍匯倖窃議糞箭験峙公匯倖奉來賜宀械楚賜宀延楚?宸倖奉來、械楚賜宀延楚祥頁宸倖糞箭議膿哈喘(strong reference)。岻侭參各岻葎“膿”哈喘?頁咀葎万膿隔嗤宸倖糞箭?旺拝峪勣宸倖膿哈喘珊贋壓?祥音嬬?支糞箭。
ARC糞樹
和中議箭徨婢幣阻ARC頁泌採垢恬議。云箭協吶阻匯倖酒汽議窃?窃兆頁Person?旺協吶阻匯倖兆葎name議械楚奉來?
class Person {
let name: String
init(name: String) {
self.name = name
println("\(name) is being initialized")
}
deinit {
println("\(name) is being deinitialized")
}
}
窃Person嗤匯倖兜兵晒痕方?initializer??譜崔宸倖糞箭議name奉來?嬉咫匯訳嶧連栖峺幣兜兵晒屎壓序佩。窃Person珊嗤匯倖deinitializer圭隈?輝?支匯倖窃議糞箭扮?氏嬉咫匯訳嶧連。俊和栖議旗鷹頭粁協吶阻眉倖Person?窃侏議延楚?宸乂延楚喘栖幹秀謹倖哈喘?宸乂哈喘脅哈喘諸効彭議旗鷹侭幹秀議Person斤嵆。咀葎宸乂延楚脅頁辛僉窃侏?Person??遇掲Person??咀緩麿断脅瓜徭強兜兵晒葎nil?旺拝輝念旺短嗤哈喘匯倖Person議糞箭。
var reference1: Person? var reference2: Person? var reference3: Person?孖壓厘断幹秀匯倖仟議Person糞箭?旺拝繍万験峙公貧峰眉倖延楚嶷議匯倖?
reference1 = Person(name: "John Appleseed") // prints "Jonh Appleseed is being initialized"廣吭?嶧連“John Appleseed is being initialized”壓距喘Person窃議兜兵晒痕方扮嬉咫。宸咫屬兜兵晒鳩糞窟伏阻。
咀葎Person議糞箭験峙公阻延楚reference1?侭參reference1頁Person糞箭議膿哈喘。嗽咀葎崛富嗤宸匯倖膿哈喘?ARC祥隠屬宸倖糞箭氏隠贋壓坪贋嶷遇音氏瓜?支。
泌惚繍宸倖Person糞箭験峙公総翌議曾倖延楚?椎担繍秀羨総翌曾倖峺?宸倖糞箭議膿哈喘?
reference2 = reference1 reference3 = reference2孖壓?宸匯倖Person糞箭嗤眉倖膿哈喘。
泌惚低宥狛験峙nil公曾倖延楚栖篤撒凪嶄議曾倖膿哈喘?淫凄圻兵議哈喘??峪複和匯倖膿哈喘?宸倖Person糞箭匆音氏瓜?支?
reference1 = nil reference2 = nil岷欺及眉倖匆頁恷朔匯倖膿哈喘瓜篤撒?ARC嘉氏?支Person議糞箭?宸扮?嗤匯泣掲械苧鳩?低涙隈写偬聞喘Person糞箭?
referenece3 = nil // 嬉咫 “John Appleseed is being deinitialized”
窃糞箭寂議膿哈喘桟
壓貧中議箭徨嶄?ARC辛參弖忸Person糞箭議哈喘方楚?旺拝壓万音壅瓜聞喘扮?支宸倖糞箭。隼遇?厘断嗤辛嬬氏亟竃宸劔議旗鷹?匯倖窃議糞箭喟垓音氏嗤0倖膿哈喘。壓曾倖窃糞箭泳緩隠隔斤圭議膿哈喘?聞誼耽倖糞箭脅聞斤圭隠隔嗤丼扮氏窟伏宸嶽秤趨。厘断各岻葎膿哈喘桟。
宥狛喘樋哈喘賜宀涙麼哈喘栖函旗膿哈喘?厘断辛參盾畳膿哈喘桟諒籾。壓蝕兵僥楼泌採盾畳宸倖諒籾岻念?尖盾万恢伏議圻咀氏載嗤逸廁。
和中議箭徨婢幣阻匯倖膿哈喘桟頁泌採壓音将吭岻寂恢伏議。箭徨協吶阻曾倖窃?蛍艶出Person才Apartment?宸曾倖窃秀庁阻匯恙巷國參式万議肖酎?
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
耽倖Person糞箭啜嗤匯倖String窃侏議name奉來參式匯倖瓜兜兵晒葎nil議apartment辛僉奉來。apartment奉來頁辛僉議?咀葎匯倖繁旺音匯協啜嗤匯恙巷國。窃貌議?耽倖Apartment糞箭啜嗤匯倖Int窃侏議number奉來參式匯倖兜兵晒葎nil議tenant辛僉奉來。tenant奉來頁辛僉議?咀葎匯倖巷國旺音匯協嗤肖酎。
宸曾倖窃匆脅協吶阻兜兵晒痕方?嬉咫嶧連燕苧宸倖窃議糞箭屎壓瓜兜兵晒。宸聞低嬬校心欺Person才Apartment議糞箭頁倦崧圓豚議椎劔瓜?支阻。
和中議旗鷹頭粁協吶阻曾倖辛僉窃侏延楚?john才number73?蛍艶瓜験峙葎蒙協議Apartment才Person議糞箭。誼吩噐辛僉窃侏議單泣?宸曾倖延楚兜兵峙譲葎nil?
var john: Person? var number73: Apartment?孖壓?低辛參幹秀蒙協議Person糞箭參式Apartment糞箭?旺験峙公john才number73?
jhon = Person(name: "John Appleseed") number73 = Apartments(number: 73)和中議夕燕苧阻壓幹秀參式験峙宸曾倖糞箭朔膿哈喘議購狼。john啜嗤匯倖Person糞箭議膿哈喘?number73啜嗤匯倖Apartment糞箭議膿哈喘:
Resize icon
孖壓低辛參繍曾倖糞箭購選軟栖?匯倖繁啜嗤匯侭巷國?匯倖巷國匆啜嗤匯倖型人。廣吭?喘湖名催?!?栖婢蝕旺恵諒辛僉窃侏議延楚?峪嗤宸劔宸乂延楚嘉嬬瓜験峙?
john!.apartment = number73 number73!.tenant = john曾倖糞箭購選軟栖朔?膿哈喘購狼泌和夕侭幣?
Resize icon
壯呉議頁?購選宸践糞箭伏撹阻匯倖膿哈喘桟?Person糞箭才Apartment糞箭光隔嗤匯倖斤圭議膿哈喘。咀緩?軸聞低篤撒john才number73侭隔嗤議膿哈喘?哈喘柴方匆音氏延葎0?咀緩ARC音氏?支宸曾倖糞箭?
john = nil nuber73 = nil廣吭?輝貧中曾倖延楚験峙葎nil扮?短嗤距喘販採匯倖deinitializer。膿哈喘桟怦峭阻Person才Apartment糞箭議?支?序匯化擬崑坪贋亶息。
緩扮膿哈喘購狼泌和夕侭幣?
Resize icon
Person才Apartment糞箭岻寂議膿哈喘卆隼贋壓。
盾畳糞箭寂議膿哈喘桟
Swift戻工曾嶽圭隈栖盾畳膿哈喘桟?樋哈喘才涙麼哈喘。樋哈喘才涙麼哈喘塋俯哈喘桟嶄議匯倖糞箭哈喘総翌匯倖糞箭?徽音頁膿哈喘。咀緩糞箭辛參札屢哈喘徽頁音氏恢伏膿哈喘桟。
斤噐伏凋巓豚嶄哈喘氏延葎nil議糞箭?聞喘樋哈喘?斤噐兜兵晒扮験峙岻朔哈喘壅匆音氏験峙葎nil議糞箭?聞喘涙麼哈喘。
樋哈喘
樋哈喘音氏奐紗糞箭議哈喘柴方?咀緩音氏怦峭ARC?支瓜哈喘議糞箭。宸嶽蒙來聞誼哈喘音氏延撹膿哈喘桟。蕗苧奉來賜宀延楚議扮昨?購囚忖weak燕苧哈喘葎樋哈喘。壓糞箭議伏凋巓豚嶄?泌惚蝶乂扮昨哈喘短嗤峙?椎担樋哈喘辛參怦峭膿哈喘桟。泌惚屁倖伏凋巓豚坪哈喘脅嗤峙?椎担屢哘議喘涙麼哈喘?壓涙麼哈喘宸匯嫗嶄嗤峋聾宙峰。壓貧中議Apartment箭徨嶄?嗤扮匯倖Apartment糞箭辛嬬短嗤型人?咀緩緩侃哘乎喘樋哈喘。
廣吭樋哈喘峪嬬蕗苧葎延楚窃侏?咀葎塰佩扮万議峙辛嬬個延。樋哈喘蒸斤音嬬蕗苧葎械楚。咀葎樋哈喘辛參短嗤峙?侭參蕗苧樋哈喘議扮昨駅倬頁辛僉窃侏議。壓Swift囂冱嶄?容呪喘辛僉窃侏栖恬葎辛嬬短嗤峙議哈喘議窃侏。
泌念侭峰?樋哈喘音氏隠隔糞箭?咀緩軸聞糞箭議樋哈喘卆隼贋壓?ARC匆嗤辛嬬氏?支糞箭?旺繍樋哈喘験峙葎nil。低辛參?殊臥凪麿議辛僉峙匯劔殊臥樋哈喘頁倦贋壓?喟垓匆音氏当欺哈喘阻匆瓜?支議糞箭議秤趨。
和中議箭徨才岻念議Person才Apartment箭徨屢貌?茅阻匯倖嶷勣議曝艶。宸匯肝?厘断蕗苧Apartment議tenant奉來葎樋哈喘?
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
weak var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
隼朔幹秀曾倖延楚(john才number73)議膿哈喘?旺購選宸曾倖糞箭?
var john: Person?
var number73: Apartment?
john = Person(name: "John Appleseed")
number73 = Apartment(nunber: 73)
john!.apartment = number73
number73!.tenant = john
和中頁哈喘議購狼夕?Resize icon
Person議糞箭挽隼頁Apartment糞箭議膿哈喘?徽頁Apartment糞箭夸頁Person糞箭議樋哈喘。宸吭龍彭輝篤撒john延楚侭隔嗤議膿哈喘朔?音壅贋壓販採Person糞箭議膿哈喘? Resize icon
屡隼音贋壓Person糞箭議膿哈喘?椎担乎糞箭祥氏瓜?支?
john = nil // 嬉咫"John Appleseed is being deinitialized"峪嗤number73珊隔嗤Apartment糞箭議膿哈喘。泌惚低篤撒宸倖膿哈喘?椎担匆音贋壓Apartment糞箭議販採膿哈喘?
Resize icon
宸扮?Apartment糞箭匆瓜?支?
number73 = nil // 嬉咫"Apartment #73 is being deinitialized"貧中議曾粁旗鷹燕苧壓john才number73験峙葎nil朔?Person才Apartment糞箭議deinitializer脅嬉咫阻“?支”議嶧連。宸屬苧阻哈喘桟厮将瓜嬉篤阻。
涙麼哈喘
才樋哈喘屢貌?涙麼哈喘匆音膿隔嗤糞箭。徽頁才樋哈喘音揖議頁?涙麼哈喘潮範兵嶮嗤峙。咀緩?涙麼哈喘峪嬬協吶葎掲辛僉窃侏?non-optional type?。壓奉來、延楚念耶紗unowned購囚忖?辛參蕗苧匯倖涙麼哈喘。咀葎頁掲辛僉窃侏?咀緩輝聞喘涙麼哈喘議扮昨?音俶勣婢蝕?辛參岷俊恵諒。音狛掲辛僉窃侏延楚音嬬験峙葎nil?咀緩輝糞箭瓜?支議扮昨?ARC涙隈繍哈喘験峙葎nil。
廣吭?輝糞箭瓜?支朔?編夕恵諒乎糞箭議涙麼哈喘氏乾窟塰佩扮危列。聞喘涙麼哈喘扮萩鳩隠哈喘兵嶮峺?匯倖隆?支議糞箭。 貧中議掲隈荷恬氏為蛍為斑哘喘雲寸?音氏窟伏涙隈圓豚議佩葎。咀緩?低哘乎閲窒宸嶽秤趨。俊和栖議箭徨協吶阻曾倖窃?Customer才CreditCard?庁亭阻咢佩人薩才人薩議佚喘触。耽倖窃脅匯倖奉來?贋刈総翌匯倖窃議糞箭。宸劔議購狼辛嬬氏恢伏膿哈喘桟。
Customer、CreditCard議購狼才岻念樋哈喘箭徨嶄議Apartment、Person議購狼舜隼音揖。壓宸倖庁侏嶄?嶧継宀音匯協嗤佚喘触?徽頁耽嫖佚喘触匯協斤哘匯倖嶧継宀。授噐宸嶽購狼?Customer窃嗤匯倖辛僉窃侏奉來card?遇CreditCard窃議customer奉來夸頁掲辛僉窃侏議。
序匯化?勣幹秀匯倖CreditCard糞箭?峪嬬宥狛勧弓number峙才customer糞箭欺協崙議CreditCard兜兵晒痕方栖頼撹。宸劔辛參鳩隠輝幹秀CreditCard糞箭扮悳頁嗤匯倖customer糞箭嚥岻購選。
咀葎佚喘触悳頁斤哘匯倖嶧継宀?咀緩協吶customer奉來葎涙麼哈喘?宸劔辛參閲窒膿哈喘桟?
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
deinit { println("\(name) is being deinitialized")
}
class CreditCard {
let number: Int
unowned let customer: Customer
init(number: Int, customer: Customer) {
self.number = number
self.customer = customer
}
deinit { println("Card #\(number) is being deinitialized")
}
和中議旗鷹協吶阻匯倖出john議辛僉窃侏Customer延楚?喘栖隠贋蝶倖蒙協嶧継宀議哈喘。咀葎頁辛延窃侏?乎延楚議兜兵峙葎nil?var john: Customer?孖壓幹秀匯倖Customer糞箭?隼朔喘万栖兜兵晒CreditCard糞箭?旺委胡幹秀竃栖議CreditCard糞箭験峙公Customer議card奉來?
john = Customer(name: "John Appleseed") john!.card = CreditCard(number: 1234_5678_9012_3456, customer:john!)厘断栖心心緩扮議哈喘購狼?
Resize icon
Customer糞箭隔嗤CreditCard糞箭議膿哈喘?遇CreditCard糞箭夸隔嗤Customer糞箭議涙麼哈喘。
咀葎customer議涙麼哈喘?輝篤撒john延楚隔嗤議膿哈喘扮?祥短嗤Customer糞箭議膿哈喘阻?
Resize icon
緩扮Customer糞箭瓜?支。隼朔?CreditCard糞箭議膿哈喘匆音鹸贋壓?咀緩CreditCard糞箭匆瓜?支?
john = nil // 嬉咫"John Appleseed is being deinitialized" // 嬉咫"Card #1234567890123456 is being deinitialized"貧中議旗鷹屬苧?john延楚験峙葎nil朔?Customer糞箭才CreditCard糞箭議deinitializer圭隈脅嬉咫阻"deinitialized"嶧連。
涙麼哈喘參式咨塀婢蝕議辛僉奉來
貧峰議樋哈喘才涙麼哈喘議箭徨顕固阻曾嶽械喘議俶勣嬉篤膿哈喘桟議哘喘魁尚。Person才Apartment議箭徨傍苧阻和中議魁尚?曾倖奉來議峙脅辛嬬頁nil,旺嗤辛嬬恢伏膿哈喘桟。宸嶽魁尚和癖栽聞喘樋哈喘。
Customer才CreditCard議箭徨夸傍苧阻総翌議魁尚?匯倖奉來辛參頁nil?総翌匯倖奉來音塋俯頁nil?旺嗤辛嬬恢伏膿哈喘桟。宸嶽魁尚和癖栽聞喘涙麼哈喘。
徽頁?贋壓及眉嶽魁尚?曾倖奉來脅駅倬嗤峙?拝兜兵晒頼撹朔音嬬葎nil。宸嶽魁尚和?夸勣匯倖窃喘涙麼哈喘奉來?総匯倖窃喘咨塀婢蝕議辛僉奉來。
宸劔?壓兜兵晒頼撹朔厘断辛參羨軸恵諒宸曾倖延楚?遇音俶勣辛僉婢蝕??揖扮嗽閲窒阻哈喘桟。云准繍御盆低哘乎泌採塘崔宸劔議購狼。
和中議箭徨競匯倖阻曾倖窃?Country才City?脅嗤匯倖奉來喘栖隠贋総翌議窃議糞箭。壓宸倖庁侏戦?耽倖忽社脅嗤遍脅?耽倖廓偏脅船奉噐匯倖忽社。侭參?窃Country嗤匯倖capitalCity奉來?窃City嗤匯倖country奉來?
class Country {
let name: String
let capitalCity: City!
init(name: String, capitalName: String) {
self.name = name
self.capitalCity = City(name: capitalName, country: self)
}
}
class City {
let name: String
unowned let country: Country
init(name: String, country: Country) {
self.name = name
self.country = country
}
}
City議兜兵晒痕方嗤匯倖Country糞箭歌方?旺拝喘country奉來栖贋刈宸倖糞箭。宸劔祥糞孖阻貧中傍議購狼。Country議兜兵晒痕方距喘阻City議兜兵晒痕方。徽頁?峪嗤Country議糞箭頼畠兜兵晒頼朔?壓Two-Phase Initialization??Country議兜兵晒痕方嘉嬬委self勧公City議兜兵晒痕方。
葎諾怎宸嶽俶箔?宥狛壓窃侏潤硫侃紗湖名催(City!)?厘断蕗苧Country議capitalCity奉來葎咨塀婢蝕議辛僉窃侏奉來。祥頁傍?capitalCity奉來議潮範峙頁nil?音俶勣婢蝕万議峙?壓Implicity Unwrapped Optionals嶄宙峰?祥辛參岷俊恵諒。
咀葎capitalCity潮範峙頁nil?匯稀Country議糞箭壓兜兵晒扮公name奉來験峙朔?屁倖兜兵晒狛殻祥頼撹阻。宸旗燕峪勣験峙name奉來朔?Country議兜兵晒痕方祥嬬哈喘旺勧弓咨塀議self。侭參?輝Country議兜兵晒痕方壓験峙capitalCity扮?万匆辛參繍self恬葎歌方勧弓公City議兜兵晒痕方。
忝貧侭峰?低辛參壓匯訳囂鞘嶄揖扮幹秀Country才City議糞箭?抜音氏恢伏膿哈喘桟?旺拝音俶勣聞喘湖名催栖婢蝕万議辛僉峙祥辛參岷俊恵諒capitalCity?
var country = Country(name: "Canada", capitalName: "Ottawa")
println("\(country.name)'s captial city is called \(country.capitalCity.name)")
// 嬉咫"Canada's capital city is called Ottawa"
壓貧中議箭徨嶄?聞喘咨塀婢蝕議辛僉峙諾怎阻曾倖窃議兜兵晒痕方議勣箔。兜兵晒頼撹朔?capitalCity奉來祥辛參恂葎掲辛僉峙窃侏聞喘?抜音氏恢伏膿哈喘桟。液淫恢伏議膿哈喘桟
念中厘断心欺阻膿哈喘桟頁泌採恢伏議?珊岑祇阻泌採哈秘樋哈喘才涙麼哈喘栖嬉篤哈喘桟。繍匯倖液淫験峙公窃糞箭議蝶倖奉來?旺拝宸倖液淫聞喘阻糞箭?宸劔匆氏恢伏膿哈喘桟。宸倖液淫辛嬬恵諒阻糞箭議蝶倖奉來?箭泌self.someProperty?賜宀距喘阻糞箭議蝶倖圭隈?箭泌self.someMethod。宸曾嶽秤趨脅擬崑阻液淫聞喘self?貫遇恢伏阻農哈喘桟。
咀葎幗泌窃宸劔議液淫頁哈喘窃侏?擬崑阻膿哈喘桟。輝低委匯倖液淫験峙公蝶倖奉來扮?低匆委匯倖哈喘験峙公阻宸倖液淫。糞嵎貧?宸倖岻念宙峰議諒籾頁匯劔議?曾倖膿哈喘斑泳緩匯岷嗤丼。徽頁?才曾倖窃糞箭音揖?宸肝匯倖頁窃糞箭?総匯倖頁液淫。
Swift戻工阻匯嶽單囘議圭隈栖盾畳宸倖諒籾?厘断各岻葎液淫媼喘双燕(closuer capture list)。揖劔議?壓僥楼泌採閲窒咀液淫媼喘双燕恢伏膿哈喘桟岻念?枠栖心心宸倖農哈喘桟頁泌採恢伏議。
和中議箭徨繍氏御盆低輝匯倖液淫哈喘阻self朔頁泌採恢伏匯倖農哈喘桟議。云箭競匯倖匯倖兆葎HTMLElement議窃?栖秀庁HTML嶄議匯倖汽鏡議圷殆?
class HTMLElement {
let name: String
let text: String?
@lazy var asHTML: () -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
println("\(name) is being deinitialized")
}
}
窃HTMLElement協吶阻匯倖name奉來栖燕幣宸倖圷殆議兆各?箭泌旗燕粁鯛議"p"?賜宀旗燕算佩議"br"?參式匯倖辛僉奉來text?喘栖譜崔HTML圷殆議猟云。茅阻貧中議曾倖奉來?HTMLElement珊協吶阻匯倖lazy奉來asHTML。宸倖奉來哈喘阻匯倖液淫?繍name才text怏栽撹HTML忖憲堪頭粁。乎奉來頁() -> String窃侏?祥頁“短嗤歌方?卦指String議痕方”。
潮範繍液淫験峙公阻asHTML奉來?宸倖液淫卦指匯倖旗燕HTML炎禰議忖憲堪。泌惚text峙贋壓?乎炎禰祥淫根辛僉峙text?賜宀音淫根猟云。斤噐粁鯛?功象text頁"some text"珊頁nil?液淫氏卦指"<p>some text</p>"賜宀"<p />"。
辛參崧糞箭圭隈椎劔肇凋兆、聞喘asHTML。隼遇?咀葎asHTML嶮梢頁液淫遇音頁糞箭圭隈?泌惚低崧個延蒙協圷殆議HTML侃尖議三?辛參喘協崙議液淫栖函旗潮範峙。
廣吭?asHTML蕗苧葎lazy奉來?咀葎峪嗤輝圷殆鳩糞俶勣侃尖葎HTML補竃議忖憲堪扮?嘉俶勣聞喘asHTML。匆祥頁傍?壓潮範議液淫嶄辛參聞喘self?咀葎峪嗤輝兜兵晒頼撹參式self鳩糞贋壓朔?嘉嬬恵諒lazy奉來。HTMLElement峪嗤匯倖兜兵晒痕方?功象name才text(泌惚嗤議三)歌方栖兜兵晒匯倖圷殆。乎窃匆協吶阻匯倖deinitializer?輝HTMLElement糞箭瓜?支扮?嬉咫匯訳嶧連。
和中議旗鷹幹秀匯倖HTMLElement糞箭旺嬉咫嶧連。
var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world") println(paragraph!.asHTML()) // 嬉咫"<p>hello, world</p>"
廣吭貧中議paragraph延楚協吶葎辛僉HTMLElement?咀緩厘断辛參験峙nil公万栖處幣膿哈喘桟。音侑議頁?HTMLElement窃恢伏阻窃糞箭才asHTML潮範峙議液淫岻寂議膿哈喘桟。泌和夕侭幣?
Resize icon
糞箭議asHTML奉來隔嗤液淫議膿哈喘。
徽頁?液淫聞喘阻self?哈喘阻self.name才self.text??咀緩液淫媼嗤阻self?宸吭龍彭液淫嗽郡狛栖隔嗤阻HTMLElement糞箭議膿哈喘。宸劔祥恢伏阻膿哈喘桟。?厚謹液淫陳媼嗤峙議佚連?萩歌深Capturing Values?。
廣吭?埋隼液淫謹肝聞喘阻self?万峪媼嗤HTMLElement糞箭議匯倖膿哈喘。泌惚譜崔paragraph葎nil?嬉篤万隔嗤議HTMLElement糞箭議膿哈喘?HTMLElement糞箭才万議液淫脅音氏瓜?支?祥咀葎膿哈喘桟?
paragraph = nil廣吭HTMLElementdeinitializer嶄議嶧連旺短嗤艶嬉咫?咫屬阻HTMLElement糞箭旺短嗤瓜?支。
盾畳液淫恢伏議膿哈喘桟
壓協吶液淫扮揖扮協吶媼嗤双燕恬葎液淫議匯何蛍?辛參盾畳液淫才窃糞箭岻寂議膿哈喘桟。媼嗤双燕協吶阻液淫坪媼嗤匯倖賜宀謹倖哈喘窃侏議号夸。才盾畳曾倖窃糞箭寂議膿哈喘桟匯劔?蕗苧耽倖媼嗤議哈喘葎樋哈喘賜涙麼哈喘?遇音頁膿哈喘。功象旗鷹購狼栖畳協聞喘樋哈喘珊頁涙麼哈喘。廣吭?Swift嗤泌和埃崩?峪勣壓液淫坪聞喘self議撹埀?祥勣喘self.someProperty賜宀self.someMethod?遇掲峪頁someProperty賜someMethod?。宸辛參戻佰低辛嬬氏音弌伉祥媼嗤阻self。
協吶媼嗤双燕
媼嗤双燕嶄議耽倖圷殆脅頁喇weak賜宀unowned購囚忖才糞箭議哈喘(泌self賜someInstance)怏撹。耽匯斤脅壓雑凄催嶄?宥狛矯催蛍蝕。媼嗤双燕慧崔壓液淫歌方双燕才卦指窃侏岻念?
@lazy var someClosure: (Int, String) -> String = {
[unowned self] (index: Int, stringToProcess: String) -> String in
// closure body goes here
}
泌惚液淫短嗤峺協歌方双燕賜宀卦指窃侏?辛參宥狛貧和猟容僅??椎担媼嗤双燕慧壓液淫蝕兵議仇圭?効彭頁購囚忖in?
@lazy var someClosure: () -> String = {
[unowned self] in
// closure body goes here
}
樋哈喘才涙麼哈喘
輝液淫才媼嗤議糞箭悳頁札屢哈喘扮旺拝悳頁揖扮?支扮?繍液淫坪議媼嗤協吶葎涙麼哈喘。屢郡議?輝媼嗤哈喘嗤扮辛嬬氏頁nil扮?繍液淫坪議媼嗤協吶葎樋哈喘。樋哈喘悳頁辛僉窃侏?旺拝輝哈喘議糞箭瓜?支朔?樋哈喘議峙氏徭強崔葎nil。旋喘宸倖蒙來?厘断辛參壓液淫坪殊臥麿断頁倦贋壓。
廣吭?泌惚媼嗤議哈喘蒸斤音氏崔葎nil?哘乎喘涙麼哈喘?遇音頁樋哈喘。念中戻欺議HTMLElement箭徨嶄?涙麼哈喘頁屎鳩議盾畳膿哈喘議圭隈。宸劔園鷹HTMLElement窃栖閲窒膿哈喘桟?
class HTMLElement {
let name: String
let text: String?
@lazy var asHTML: () -> String = {
[unowned self] in
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
println("\(name) is being deinitialized")
}
}
貧中議HTMLElement糞孖才岻念議糞孖屢揖?峪頁謹阻媼嗤双燕。宸戦?媼嗤双燕頁[unowned self]?旗燕“喘涙麼哈喘遇音頁膿哈喘栖媼嗤self”。才岻念匯劔?厘断辛參幹秀旺嬉咫HTMLElement糞箭?
var paragraph: HTMLElement? = HTMLElement(name: "p", text: "hello, world") println(paragraph!.asTHML()) // 嬉咫"<p>hello, world</p>"聞喘媼嗤双燕朔哈喘購狼泌和夕侭幣?
Resize icon
宸匯肝?液淫參涙麼哈喘議侘塀媼嗤self?旺音氏隔嗤HTMLElement糞箭議膿哈喘。泌惚験峙paragraph葎nil?HTMLElement糞箭繍氏瓜?支?旺嬬心欺万議deinitializer嬉咫議嶧連。
paragraph = nil // 嬉咫"p is being deinitialized"
<貧匯准
和匯准>