IOS學習三:Objective-C的擴充OOP,類別,記憶體管理等

來源:互聯網
上載者:User

其實自己也不知道這些概念怎麼寫,總不能直接從書上copy吧,那還不如買書了,這多累。

對於一些抽象的概念,一般都是大師寫的。比如那本可以當枕頭的java編程思想。那真的是思想啊。1遍過後絕對跟看小說似的,模模糊糊。

而抽象著東西並沒有什麼很好的定義,因為它無法定義。

真正的理解,可能還是要我們自己的時間和積累。

這會兒我業餘學習ios一周,目前紅柚子那本剛好邊看邊實踐到選取器有關的那部分。

我雖有做筆記,但我的筆記基本只帶幾個關鍵字。

幾天的代碼例子實踐下,因為現在的開發環境時sdk5.1+xcode4.3.2,無論時xcode下的分布的專案檔結構,nib,storyboarder,arc機制,變化還是挺大的。

就結合oc基礎羅嗦下。

一:OOP思想,物件導向這個概念性東西大家應該都有。

什麼繼承,封裝,多態這些就跟背單詞一樣。但是,簡單的還是需要用大白話能說出來的。

先說封裝:封裝我覺得其實是oop思想最原始的一個基礎。封裝的引入後,才能衍生出對象這一概念。我們把一個物體和它擁有的屬性和更能封裝起來,是一個抽離然後融合的過程。

繼承:繼承從字面句很好瞭解,兒子繼承父親。一個物體派生出一個新的物體。當然,繼承後的很多特性,你可以背書去。

多態:多態其實更好解釋了,聽字面,多種形態?一個事物的多種實現(當然,這個可能很直觀很字面,但是從嚴謹性上來說是錯誤的)因為一個物體的多種實現,怎麼

看怎麼聽都是像繼承啊,比如我有個魚類,那麼我可以派生一個鯊魚類和一個鯨魚類,那對於這個做法來說,感覺是繼承啊。其實他們的本質思想都是差不多的,

只是側重點的不同。繼承更像表達一個物體派生一個新物體,多態則是一個物體派生出多個物體對改物體的不同實現,這個實現最直接的方式就是對超類中方法的不同的覆寫和實現。比如魚類,有個eat()方法,派生的鯊魚類,我們都知道鯊魚吃肉,那麼我們可以實現鯊魚的eat方法是吃肉的,藍鯨我們算他雜食吧,那麼藍鯨的eat方法則是實現雜食吃法。此時你就可以站在一個全面的角度簡單的看到多態這個概念了。

對於深入理解OOP這個思想定義,其實就類似於看你對待事物抽象的高度。

二:新事物的或者說一個新類產生的集中方式。

1.最原始得一種,就是我們自己抽象定義除一個類。比如定義最原始的類,在java和OC中都存在這樣一個原始類Object。

2.繼承而來派生出一個新類。這個很好理解。比如從人類Human衍生出男人類 Man,

3.還有一種是我們比較少明確意識到,但是其實是很常用到方法:複合,既用幾個不同的類來複合成一個新類。最常用就以書上例子解釋 ,Car 汽車類,

簡單我們可以用Engine引擎和Tires輪子來構造成最簡單的Car模型。

三:OC中類別和非正式協議概念

1.category,類別應該算是OC專屬的一個術語,書上給類別的定義是:一種為現有類添加新方法的一種方式。

其實這個方式怎麼聽怎麼像建立子類就可以做到的概念。

是的,為一個類做擴充,我們最常想到的方法就是為其建立一個子類,然後添加你需要擴充的新方法等。

但是在OC中有時這樣並不方便,書上舉例了一個NSString的例子。原話是這樣的:

/**********

當希望為新有類添加新的行為時,我們通常會建立子類。

但是有時子類並不方便。例如,你可能會希望為NSString類新增一些新行為,但是你知道,NSString實際上只是一個類簇的前台表示,因而無法

為這樣的類建立子類。省略1000字。

********/

好了,從上面我們基本知道,建立子類這個方法是有局限性的對吧。上面引入一個概念叫類簇。

字面意思(一簇鮮花,就是許多朵花紮成一束呈現出來,裡面的具體其實我們是不知道的。)

類簇其實也算是個不大不小的概念。集體可以看官方文檔 http://www.apple.com.cn/developer/mac/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_9.html

鄙人也是新接觸這玩意兒,裡面有這麼一句話:

/*****

類簇將一些私人的、具體的子類組合在一個公用的、抽象的超類下面。

****/

我不知道是不是可以理解。類簇包含的成分是帶有私人性質的,但我們都知道,繼承後的子類是不能訪問父類的私人成員的(這個應該沒錯吧?)

那麼我們在新建立的子類添加的新方法就無許可權訪問那些東西咯。

好吧,以上是個人理解,這東西也是聽拗口的,具體詳情可以參考更多官方文檔。

那麼,好了,我們大體上知道OC引入類別這個機制的原因了。配合上OC動態運行時的分配機制,你可以為現有類添加新的方法,嘿,這

聽起來很酷!(書上原話)

類別建立:

@interface  NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber;
@end//NumberConvenience
聲明有兩個特點:
     (1)現有的類位於@interface關鍵字之後,其後是位於圓括弧中的類別名稱。類別名稱是NumberConvenience,而且該類別將向NSString類中添加方法。換句話說:“我們向NSString類中添加一個名稱為NumberConvenience的類別。”同名類別有唯一性,但是可以添加任意多的不同名類別。
     (2)可以執行希望向其添加類別的類以及類別的名稱,還可以列出添加的方法
        不可以添加新的執行個體變數,類別生命中沒有執行個體變數部分。

類別的實現基本和一般類的實現一樣。


非正式協議和委託:非正式協議概念其實就是類別的另一種表達方式“這裡有一些你可能希望實現的方法,你可以使用他們更好的完成工作”。

這個意思是,這些是可選的。比如我門要一個更好的方法,我們就會申明一個這樣的類別去實現。然後你在後期可以直接使用這些更好的方法。

這麼看,總覺得類別這玩意兒有點像協議的可選協議。

可選協議只不過是有先見之明,類別是後期補救。共同一點時,對於方法實現都是可選的。可選協議有關鍵optionnal申明了,類別則你像高效方法你就申明,

不想就算了。

之後是委託,算OC中一個很重量級的概念。據說深入後會發現很多東西,主要鄙人目前還只接觸幾天,對於它在oc中整體的設計模式理論還是不太瞭解。

只是在寫例子代碼時,怎麼看怎麼覺得就如java中的監聽和回調。可能要更好的理解,那還是要更多的接觸代碼才能會有個深刻的理解。


四:記憶體管理的改變

只所以說記憶體管理的改變,是以前一直說c和c++成員的在工作中最需要注意的問題就是記憶體管理。

在接觸ios5.1前,網上看了大部分資料,記憶體管理都有很重要的戲份。

只是,當我學習時,發現,這塊被淡化了。

現在版本的新特性引入了ARC機制。感覺完全變的和java一樣了。

在建立項目選者ARC選項後,你會發現在代碼中你根本不用手動去釋放記憶體了。release什麼都被劃掉了 = =。

不知道這算時好事還是壞事。可能對於我們新手來說,哇。。方便了好多。


暫完

-------2012.04.22筆記整理




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.