個人認為本周所講的知識點的難度較上周有很大提高,雖然只有五節(jié)課,每節(jié)課的時長也不多,但是作業(yè)做起來問題不斷,真是難熬的一周!
下面把我在課上聽到的自認為重要的知識點記錄下來,分享和參考:
【集合】部分:三個重點
I. NSArray/NSSet/NSLibrary(父類) -->NSMutable...(子類):會出現(xiàn)偷換指針的漏洞,需要切切注意。
II. 盡量使用快速枚舉方法,迭代器甚至是for循環(huán)的效率很低。
III.可變?nèi)萜鲀?nèi)存的增長方式
另外:一個number不可以直接放在NSArray中,必須封裝為對象類型。
? ? ? ? ?在內(nèi)存模型上,棧上的數(shù)組指向堆上的一塊內(nèi)存,而每個元素指向同一個新的對象。堆上的對象不能指向棧上,因為棧的生存周期較短(每個棧在函數(shù)結(jié)束之后即消失),因此只能是堆上的對象指向堆上,故NSNumber被封裝成對象類型。
【ARC】部分的重點
ARC結(jié)合屬性之后,一旦指針回指對象,會形成循環(huán)引用,如果出現(xiàn)這種情況,要在attribute上加一個weak,構(gòu)成一個弱引用,以解決這個問題。
【協(xié)議】部分
協(xié)議可包含的成員:
? (常用)屬性、實例方法、類方法
? (罕見)初始化器、析構(gòu)器
? (不可)實例變量成員 <=[協(xié)議中定義的屬性本質(zhì)上是訪問器方法]
協(xié)議的本質(zhì)是一個不能創(chuàng)建實例的聲明類型。
常用的協(xié)議需要了解。
【類別與擴展】
類別:我認為類別的主要任務(wù)就是把XCode自己包含的類(或者一些不知道源代碼的)進行一下功能上的擴充。譬如作業(yè)中,對數(shù)組的一個擴充,以實現(xiàn)一些沒有的功能。 ? 可以添加的包括:類方法、實例方法或者重寫基類方法,而屬性、實例變量和重名的就不行了。 ? 同時,命名也需要有一定的規(guī)范,即一些約定俗成的東西還是不要個性的為好。
擴展的話,也是增加功能,并且可以添加、改寫屬性,但只能類內(nèi)訪問,這也是和類別恰恰相反的地方。
類別的缺點(摘抄):
類別乍一看像是一個類的子類,其實類別還是有一定的局限性,當(dāng)在Category中覆蓋一個繼承的方法,在Category中的方法可以通過向super類發(fā)送一個消息來調(diào)用被繼承的方法。但是,如果 Category中覆蓋的那個方法已經(jīng)在這個類的其它Category定義過了,則之前定義的方法將沒有機會被程序調(diào)用 ,在Category中無法確定其能夠可靠的覆蓋某個方法,而這個方法已經(jīng)在其它的Category中定義過。這個問題在使用Cocoa框架時尤其突出。 當(dāng)你想覆蓋某個框架已經(jīng)定義好的方法時,該方法已經(jīng)在其它Category中實現(xiàn),這樣就無法確定哪個定義和實現(xiàn)會被最先使用,帶來很大的不確定性。
如果你重新覆蓋定義了一些方法,往往會導(dǎo)致這個方法在整個框架中實現(xiàn)發(fā)生了變化。舉例來說,如果你增加了NSObject中windowWillClose:的實現(xiàn),這會導(dǎo)致所有的窗口調(diào)用那個新實現(xiàn)的方法,從而改變所有NSWindows實例的行為。這會帶來很多不確定性,并很有可能導(dǎo)致程序的崩潰。
本周的課有點吃力,說實話,很多東西都沒有徹底消化,欠賬也很多。歸根結(jié)蒂還是自己的努力不夠,同時批到了同學(xué)的作業(yè)和心得筆記,發(fā)現(xiàn)自己的差距和那些認真努力的同學(xué)很大,今后要以他們?yōu)榘駱?,格物致知,努力學(xué)習(xí),把之前欠下來的補上,并且追上進度,創(chuàng)造更大的成績!