[obj-c]objective-c 之歌 最簡單最快速的objective-c教程

[obj-c]objective-c 之歌 最簡單最快速的objective-c教程

http://hi.baidu.com/hh20040410/blog/item/27187e620aa00ad4e6113a1e.html

 

C沒有類
這讓人很疲憊
對象的說法很時髦
不就是繼承封裝組合人人會
右走是C++,這個大衆都熟悉它
左走就是objective-c,躲在僻靜僻靜的麥金塔
本是同根生的C
如何高舉面向對象的大旗
求同存異標新立異且聽一一細分清

對象的C
是不同的C
類的處理與衆不同重點要區分

不重複是我的口頭禪
任何時候我只說一次告訴你我的地盤
[@begincommand] | @end就是我的指示
@interface classname 聲明類
@implementation classname 實現類
@protocol interfacename 聲明接口
就是這麼簡單,你的一定要明白

我先聲明對成員變量和方法的關係有遠近
成員變量大大括在我的懷
關係遠近 public / protected / private 來區分
若不聲明全默默受着保護
靜態成員變量請不要放在此
成員方法我不太愛
前面拴着繩子置於類的變量列表外
減號就是普通函數
加號就是靜態函數 莫怪
函數的聲明有點怪
我要一眼叫出名,包括函數名和參數名
其餘的類型括起來 ,我有空再來慢慢看
函數名和參數名之間用:分隔開
多個參數的函數那就是更怪
逗號其實不是我的愛
後續的每個參數分隔用空白
每個參數形式如 標籤:(參數類型)參數名
其實只要把函數名看作是第一個參數標籤
你就能領悟其中的奧妙並在調用時喜愛
成員方法太多我才懶得區分親疏遠近
它們一律都是公之於衆要好好的幹活
誰若不服膽敢出頭犯上
就踢出頭文件打入冷宮永世不能露面試試看
所有的成員方法都是虛函數
改則重載,不改就繼承
不用任何標記請放心大膽隨便使用

對象的類,在繼承層次上考慮才顯得重要
所有的類最終都繼承於NSObject
因爲它給你創建自己生命的方法

不繼承於NSObject的只能是接口protocol
它沒有成員變量只有方法
它只有聲明不用實現
這點和java很相似

當然類還有一些絕活可以讓你開開眼
可以動態的擴充一個類 而不總是用繼承
@interface CClassA(Category)|@end
@implementation CClassA (Category)|@end
源代碼外包含該 類的頭文件
就可以使用該Category中的方法

也可以動態的替換一個類
但是只限於用繼承類來替換基類功能
[CInheritClass poseAsClass: [CBaseClass class]];
聲明之後用基類創建的對象實際上行爲都是繼承類

所以一個類的完整聲明如下:
@interface CClassA(Category): CBaseClass<IA,IB...>
類別,基類,接口一一具全
加上靜態 虛函數
所有特性和C++均可對應
再加上所獨有的特性
這一特性編譯類語言很少有
設計得當完全可以實現動態調用dll切換功能

類的定義和使用,也有點怪
想想看一個對象的生命週期,該是如何辦
創建很是彆扭
這樣就定義了一個類對象,
CClassName* pA = [[CClassName alloc] init];
能且只能返回對象指針
釋放分爲兩種
自動釋放聲明後 [pA autorelease]; 以後可以不管
否則就必須配對 [pA release];
注意類的構造函數init可以捕獲
但是析構函數卻沒有 這點很讓人意外

使用類也有多種情況
調用成員方法用中括號 int nRtn = [pA method:param1];
而靜態成員方法不需要對象 int nRtn = [CClassName method];
調用成員變量還是C格式 pA->m_nCount = 1;

所有的類,都可以對應一個id類型
用來引用一個對象               id cur = sq;
或者用來引用一個對象指定的接口 id<IA> cur = sq;
然後就可以調用該對象的方法和指定接口方法
發佈了23 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章