斯坦福iPhone 應(yīng)用開發(fā)課程(2010年冬)PPT翻譯03_C_usto.pdf_第1頁
斯坦福iPhone 應(yīng)用開發(fā)課程(2010年冬)PPT翻譯03_C_usto.pdf_第2頁
斯坦福iPhone 應(yīng)用開發(fā)課程(2010年冬)PPT翻譯03_C_usto.pdf_第3頁
斯坦福iPhone 應(yīng)用開發(fā)課程(2010年冬)PPT翻譯03_C_usto.pdf_第4頁
斯坦福iPhone 應(yīng)用開發(fā)課程(2010年冬)PPT翻譯03_C_usto.pdf_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

翻譯提供 翻譯提供 1 1 CS193P 第三課 iPhone應(yīng)用程序開發(fā) 自定義類 對象的生命周期 自動釋放 屬性 CS193P 第三課 iPhone應(yīng)用程序開發(fā) 自定義類 對象的生命周期 自動釋放 屬性 翻譯提供 1 翻譯提供 翻譯提供 2 2 摘要 1A和1B課程在1月十三日周三晚上11 59 登記的斯坦福學(xué)生可以發(fā)送任何問題到 cs193p cs stanford edu 盡快提交程序 操作說明在網(wǎng)站上 刪掉bulid文件夾 Xcode不會做這件事 翻譯提供 翻譯提供 3 3 摘要摘要 2A2A和和2B2B課程在課程在1 1月月2020日周三晚上日周三晚上1111 5959 2A2A 繼續(xù)介紹基本工具 繼續(xù)介紹基本工具 添加自定義類添加自定義類 基本的內(nèi)存管理基本的內(nèi)存管理 2B2B 開始第一個 開始第一個iPhoneiPhone程序程序 討論的問題討論的問題1 141 14 周四 周四 作業(yè)包含許多練習(xí)作業(yè)包含許多練習(xí) 翻譯提供 翻譯提供 4 4 在校學(xué)生和iTunes U 講座已經(jīng)開始在講座已經(jīng)開始在iTunes UiTunes U上發(fā)布上發(fā)布 發(fā)布時間比去年長發(fā)布時間比去年長 開始講座 開始講座 講座后沒有安排時間做練習(xí)講座后沒有安排時間做練習(xí) 翻譯提供 翻譯提供 5 5 工作時間 保羅的工作時間保羅的工作時間 周四周四 2 2 4 4 在在 B26BB26B 大衛(wèi)的工作時間大衛(wèi)的工作時間 周一周一4 4 6pm 6pm 在在360360 翻譯提供 翻譯提供 6 6 今天的話題 解決解決1A1A和和1B1B功課中的問題功課中的問題 創(chuàng)建自定義類創(chuàng)建自定義類 對象的生命周期對象的生命周期 自動釋放自動釋放 ObjectiveObjective C C特性特性 翻譯提供 翻譯提供 7 7 自定義類 翻譯提供 7 翻譯提供 翻譯提供 8 8 設(shè)計階段 創(chuàng)建一個類創(chuàng)建一個類 personperson 確定父類確定父類 NSObjectNSObject 在這里 在這里 有什么樣的屬性有什么樣的屬性 Name age Name age 是否能投票是否能投票 執(zhí)行什么樣的功能 執(zhí)行什么樣的功能 投票投票 翻譯提供 翻譯提供 9 9 定義一個類 一個公共的頭文件和一個私有的實現(xiàn)文件一個公共的頭文件和一個私有的實現(xiàn)文件 Implementation FileImplementation FileHeader FileHeader File 翻譯提供 翻譯提供 定義一個類 一個公共的頭文件和一個私有的實現(xiàn)文件一個公共的頭文件和一個私有的實現(xiàn)文件 Implementation FileImplementation FileHeader FileHeader File 翻譯提供 翻譯提供 在頭文件中聲明類 import import interface Person NSObject interface Person NSObject 實例變量實例變量 NSString name NSString name int age int age 聲明方法聲明方法 NSString name NSString name void setName NSString value void setName NSString value int age int age void setAge int age void setAge int age BOOL canLegallyVote BOOL canLegallyVote void castBallot void castBallot end end 翻譯提供 翻譯提供 定義一個類 一個公共的頭文件和一個私有的實現(xiàn)文件一個公共的頭文件和一個私有的實現(xiàn)文件 翻譯提供 翻譯提供 實現(xiàn)這個類 實現(xiàn)實現(xiàn)gettergetter setter setter方法方法 實現(xiàn)功能方法實現(xiàn)功能方法 翻譯提供 翻譯提供 類的實現(xiàn) import Person h implementation Person int age return age void setAge int value age value 其它方法 end 翻譯提供 翻譯提供 調(diào)用自己的方法 import Person h import Person h implementation Person implementation Person BOOL canLegallyVote BOOL canLegallyVote void castBallot void castBallot end end 翻譯提供 翻譯提供 調(diào)用自己的方法 import Person h import Person h implementation Person implementation Person BOOL canLegallyVote BOOL canLegallyVote return self age 18 void castBallot void castBallot end end 翻譯提供 翻譯提供 調(diào)用自己的方法 import Person h import Person h implementation Person implementation Person BOOL canLegallyVote BOOL canLegallyVote return self age 18 void castBallot void castBallot if self canLegallyVote 填入投票實現(xiàn) else NSLog 我沒有權(quán)利投票 end end 翻譯提供 翻譯提供 父類方法 就像剛才看到的 使用就像剛才看到的 使用 selfself 調(diào)用變量 調(diào)用變量 像是像是JavaJava和和C C 中的中的 thisthis 使用使用supersuper請求調(diào)用父類方法請求調(diào)用父類方法 void doSomething void doSomething 首先調(diào)用父類實現(xiàn)首先調(diào)用父類實現(xiàn) super doSomething 然后實現(xiàn)我們的自定義行為然后實現(xiàn)我們的自定義行為 int foo bar int foo bar 翻譯提供 翻譯提供 翻譯提供 19 類的生命周期 翻譯提供 翻譯提供 對象的生命周期 對象的創(chuàng)建對象的創(chuàng)建 內(nèi)存管理內(nèi)存管理 對象的銷毀對象的銷毀 翻譯提供 翻譯提供 類的創(chuàng)建 兩步過程兩步過程 分配內(nèi)存空間來存儲對象分配內(nèi)存空間來存儲對象 初始化對象初始化對象 alloc 用來確定分配多少內(nèi)存的靜態(tài)方法用來確定分配多少內(nèi)存的靜態(tài)方法 init 初始化變量 執(zhí)行其它設(shè)置初始化變量 執(zhí)行其它設(shè)置 翻譯提供 翻譯提供 類的創(chuàng)建 分配內(nèi)存 初始化 Person person nil Person person nil person Person alloc init person Person alloc init 翻譯提供 翻譯提供 執(zhí)行你自己的 init方法 import Person h implementation Person id init 讓父類首先初始化 if self super init age 0 name Bob 做其它初始化 return self end 翻譯提供 翻譯提供 多個初始化方法 類可以定義多個初始化方法 id initid init id initWithName NSStringid initWithName NSString name name id initWithName NSStringid initWithName NSString name name age int ageage int age 簡單的通常使用默認(rèn)值調(diào)用復(fù)雜的初始化方法簡單的通常使用默認(rèn)值調(diào)用復(fù)雜的初始化方法 id initid init return initWithNamereturn initWithName NoNo NameName id initWithName NSStringid initWithName NSString name name returnreturn self self initWithName nameinitWithName name age 0 age 0 翻譯提供 翻譯提供 完成一個對象的初始化 Person person nil person Person alloc init person setName Jimmy Jones person setAge 32 person castBallot person doSomethingElse 翻譯提供 翻譯提供 完成一個對象的初始化 Person person nil person Person alloc init person setName Jimmy Jones person setAge 32 person castBallot person doSomethingElse 當(dāng)我們做完時我們怎么處理person對象 翻譯提供 翻譯提供 內(nèi)存管理 方法調(diào)用必須平衡 否則你的程序會內(nèi)存泄露或是崩潰 無論怎樣 你將從不直接調(diào)用 dealloc 有個例外 我們等會兒看 分配內(nèi)存銷毀對象 Cmallocfree Objective Callocdealloc 翻譯提供 翻譯提供 引用計數(shù) 每個對象都有個每個對象都有個retain countretain count 有關(guān)有關(guān)NSObjectNSObject的定義的定義 只要只要retain count retain count 大于零大于零 對象就是存在和有效的對象就是存在和有效的 alloc和和 copy創(chuàng)建對象并使創(chuàng)建對象并使retain count retain count 等于等于1 1 retain增加增加retain count retain count release減少減少retain countretain count 當(dāng)當(dāng)retain count retain count 減少到零減少到零 對象就會被清理掉對象就會被清理掉 dealloc自動調(diào)用自動調(diào)用 單向街單向街 一旦你調(diào)用一旦你調(diào)用 deallocdealloc方法就不會返回方法就不會返回 翻譯提供 翻譯提供 匹配調(diào)用 Person person nil Person person nil person Person person Person alloc init init person setName person setName Jimmy JonesJimmy Jones person setAge 32 person setAge 32 person castBallot person castBallot person doSomethingElse person doSomethingElse 當(dāng)用完當(dāng)用完personperson時釋放它時釋放它 person person release person person 將在這里被銷毀將在這里被銷毀 翻譯提供 翻譯提供 引用計數(shù)在起作用 Person person Person alloc init Person person Person alloc init person retain person retain person release person release person release person release alloc 使使Retain count為為1 retain 使使 Retain count增加到增加到2 release 使使 Retain count減少到減少到1 Retain count 減少到減少到0 調(diào)用調(diào)用 dealloc 方法方法 翻譯提供 翻譯提供 關(guān)于已釋放的對象 Person person Person alloc init Person person Person alloc init person release person release 對象被釋放了 翻譯提供 翻譯提供 關(guān)于已釋放的對象 Person person Person alloc init Person person Person alloc init person release person release 對象被釋放了 person doSomething 崩潰了 翻譯提供 翻譯提供 關(guān)于已釋放的對象 Person person Person alloc init Person person Person alloc init person release person release 對象被釋放了 翻譯提供 翻譯提供 關(guān)于已釋放的對象 Person person Person alloc init Person person Person alloc init person release person release 對象被釋放了 person nil 翻譯提供 翻譯提供 關(guān)于已釋放的對象 Person person Person alloc init Person person Person alloc init person release person release 對象被釋放了 person nil person doSomething 沒有反應(yīng) 翻譯提供 翻譯提供 執(zhí)行一個 dealloc方法 import Person h implementation Person void dealloc 需要做些清理 當(dāng)我們做完后調(diào)用父類來清理 super dealloc end 翻譯提供 翻譯提供 對象生命周期總結(jié) 對象剛創(chuàng)建時retain count為1 retain count隨 retain和 release增加減少 當(dāng)retain count減少到0 對象自動調(diào)用 dealloc方法 你從不在你的代碼中直接調(diào)用dealloc方法 除了調(diào)用 super dealloc 你只需處理alloc copy retain release 翻譯提供 翻譯提供 對象所有權(quán) import interface Person NSObject 實例變量 NSString name Person 類擁有name屬性 int age 方法聲明 NSString name void setName NSString value int age void setAge int age BOOL canLegallyVote void castBallot end 翻譯提供 翻譯提供 對象所有權(quán) import Person h implementation Person 翻譯提供 翻譯提供 對象所有權(quán) import Person h implementation Person NSString name return name void setName NSString newName end 翻譯提供 翻譯提供 對象所有權(quán) import Person h implementation Person NSString name return name void setName NSString newName if name newName name release name newName retain name的retain count增加1 end 翻譯提供 翻譯提供 對象所有權(quán) import Person h implementation Person NSString name return name void setName NSString newName end 翻譯提供 翻譯提供 對象所有權(quán) import Person h implementation Person NSString name return name void setName NSString newName if name newName name release name newName copy name的retain count增加1 end 翻譯提供 翻譯提供 釋放實例變量 import Person h implementation Person void dealloc 需要做些清理 name release 當(dāng)我們做完時調(diào)用父類進(jìn)行清理 super dealloc end 翻譯提供 翻譯提供 翻譯提供 45 自動釋放 翻譯提供 翻譯提供 返回一個新創(chuàng)建的對象 NSString fullName NSString result result NSString alloc initWithFormat firstNam e lastName return result 錯誤錯誤 結(jié)果是內(nèi)存泄露內(nèi)存泄露 翻譯提供 翻譯提供 返回一個新創(chuàng)建的對象 NSString fullName NSString result result NSString alloc initWithFormat firstName lastName result release return result 錯誤錯誤 結(jié)果是釋放太早釋放太早 方法返回一個虛值 翻譯提供 翻譯提供 返回一個新創(chuàng)建的對象 NSString fullName NSString result result NSString alloc initWithFormat firstName lastName result autorelease return result 這就對了 結(jié)果被釋放 擔(dān)不是立刻 Caller獲得真實的對象如果需要會retain它 翻譯提供 翻譯提供 自動釋放對象 調(diào)用 autorelease標(biāo)志著一個對象將在未來 的某個時刻被釋放掉 讓你在需要時執(zhí)行你的retain release方法 在此期間允許對象延長一段生命 使內(nèi)存管理變得更容易 在返回一個新的對象時很有用 翻譯提供 翻譯提供 方法名字和自動釋放 名字為alloc copy 或是返回一個已分配內(nèi)存的對象的方法 需要調(diào)用release方法 NSMutableString string NSMutableString alloc init 我們要負(fù)責(zé)調(diào)用 release或是 autorelease string autorelease 所有的其它方法反回自動釋放的對象 NSMutableString string NSMutableString string 方法名字沒有指示我們?nèi)メ尫潘?所以我們不用 沒我們的事 這是約定 在你的方法中遵循它 在你的方法中遵循它 翻譯提供 翻譯提供 自動釋放是如何工作的 對象被加到自動釋放池中 自動釋放池跟蹤安排要被釋放的對象 當(dāng)自動釋放池自己被釋放時 它發(fā)送 release到 它所有的對象 UIKit框架自動打包了一個自動釋放池存放所 有的事件調(diào)用 翻譯提供 翻譯提供 自動釋放池 翻譯提供 翻譯提供 自動釋放池 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 object autorelease 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 池被釋放 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 池被釋放 翻譯提供 翻譯提供 自動釋放池 自動釋放的對象從 這里進(jìn)入自動釋放池 池被釋放 翻譯提供 翻譯提供 抓住一個自動釋放的對象 許多方法返回自動釋放的對象 記住命名規(guī)約 它們被放到池中并且之后將被釋放 如果你需要處理這些對象你需要retain它們 在釋放之前retain count突然增加 name NSMutableString string 我們想保留name的有效值 name retain 最后 我們釋放它 或許在我們的 dealloc方法中 name release 翻譯提供 翻譯提供 邊注 垃圾回收器 自動釋放不是垃圾回收器 iPhone OS 中的Objective C沒有垃圾回收器 翻譯提供 翻譯提供 Objective C特性 翻譯提供 64 Objective C特性 翻譯提供 翻譯提供 特性 提供訪問對象屬性的方法提供訪問對象屬性的方法 簡化了簡化了 implementingimplementing中中 getter setter getter setter 方法方法 還允許您指定 還允許您指定 只讀與讀寫權(quán)限只讀與讀寫權(quán)限 內(nèi)存管理策略內(nèi)存管理策略 翻譯提供 翻譯提供 定義特性 import Foundation import interface Person interface Person NSObjectNSObject 實例變量實例變量 NSStringNSString name name intint age age 方法聲明方法聲明 NSStringNSString name name void setName NSStringvoid setName NSString value value intint age age void setAge int agevoid setAge int age BOOL BOOL canLegallyVotecanLegallyVote void castBallotvoid castBallot end end 翻譯提供 翻譯提供 定義特性 import Foundation import interface Person interface Person NSObjectNSObject 實例變量實例變量 NSStringNSString name name intint age age 方法聲明方法聲明 NSStringNSString name name void setName NSStringvoid setName NSString value value intint age age void setAge int agevoid setAge int age BOOL BOOL canLegallyVotecanLegallyVote void castBallotvoid castBallot end end 翻譯提供 翻譯提供 定義特性 import Foundation import interface Person interface Person NSObjectNSObject 實例變量實例變量 NSStringNSString name name intint age age property property intint age age property copy property copy NSStringNSString name name prop prop void castBallot void castBallot end end 翻譯提供 翻譯提供 定義特性 import Foundation import interface Person interface Person NSObjectNSObject 實例變量實例變量 NSStringNSString name name intint age age 特性聲明特性聲明 property property intint age age property copy property copy NSStringNSString name name property property readonlyreadonly BOOL BOOL canLegallyVcanLegallyV void castBallotvoid castBallot end end 翻譯提供 翻譯提供 定義特性 import Foundation import interface Person interface Person NSObjectNSObject 實例變量實例變量 NSStringNSString name name intint age age 特性聲明特性聲明 NSStringNSString name name void setName NSStringvoid setName NSString value value intint age age void castBallotvoid castBallot end end 翻譯提供 翻譯提供 生成特性 implementation Person implementation Person int ageint age return age return age void setAge int valuevoid setAge int value age value age value NSStringNSString name name return name return name void setName NSStringvoid setName NSString value value if value name if value name name release name release name value copy name value copy void canLegallyVotevoid canLegallyVote 翻譯提供 翻譯提供 生成特性 implementation Person implementation Person int ageint age return age return age void setAge int valuevoid setAge int value age value age value NSStringNSString name name return name return name void setName NSStringvoid setName NSString value value if value name if value name name release name release name value copy name value copy void canLegallyVotevoid canLegallyVote 翻譯提供 翻譯提供 生成特性 implementation Person implementation Person int ageint age return age return age void setAge int valuevoid setAge int value age value age value NSStringNSString name name return name return name void canLegallyVotevoid canLegallyVote 翻譯提供 翻譯提供 生成特性 implementation Person synthesize age synthesize name BOOL canLegallyVote return age 17 end 翻譯提供 翻譯提供 特性的屬性 只讀與讀寫權(quán)限只讀與讀寫權(quán)限 property property intint age age 默認(rèn)讀寫權(quán)限默認(rèn)讀寫權(quán)限 property property readonly BOOL BOOL canLegallyVotecanLegallyVote 內(nèi)存管理策略內(nèi)存管理策略 只對對象屬性只對對象屬性 property property assign NSStringNSString name name 指針指針 assignmentassignment property property retain NSStringNSString name name 保留保留 property property copy NSStringNSString name name 復(fù)制復(fù)制 翻譯提供 翻譯提供 屬性名 vs 實例變量 特性的名可以和實例變量的名稱不相同特性的名可以和實例變量的名稱不相同 interface Person interface Person NSObjectNSObject intint numberOfYearsOld property property inti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論