網頁

2011年11月21日 星期一

iOS學習_Objective-C超基本亂記2

第三堂課就在磅礡大雨中進行,為了往後可以複習一下觀念,還是補一下筆記。
------------------------------------------------------------

1.繼承

#import "要繼承的類別.h"

@interface className:要繼承的類別 {
}
說明:
- 繼承用":"
- 在繼承前記得先import

2. 覆寫
-進行覆寫時,不需要增加overwrite等關鍵字,取名相同則直接進行覆寫。

3. 使用父層方法
- 要使用父層方法,與許多程式語法相同,使用super。

4. 使用自己
- 要取得自己,使用self

5. 類別初始化
- Objective-c並沒有建構函式,若是要進行初始化,可自行以一般函式的寫法來達成。

h檔定義
- (ola *)initWith:(NSString *)nameValue age:(CGFloat)ageValue;

m檔實做
- (ola *)initWith:(NSString *)nameValue age:(CGFloat)ageValue;
{
self = [super init];
if (self)
{
self.name = NameValue;
self.age = ageValue;
}
return self;
}
說明:
- 實做時,先呼叫父層的init方法,若繼承於NSObject,則代表呼叫[NSObject init],成功建立實體後,塞入初始化數值,最後回傳自己。(也就是例中ola類別)

6. id動態型別
- 有時候一個Array裡面可能有多種類別,這時可以利用動態型別來承接。

if ([temp isMemberOfClass:[ola class]])
判斷temp是否為ola型別。(無多型概念)


if ([temp isKindOfClass:[ola class]])
判斷temp是否為ola型別的相關種類(有多型概念)


if ([temp respondsToSelector:@selector[initWith]])
判斷temp是否有initWith的方法

7. try的使用

@try
{
}
@catch (NSException *e)
{
NSLog(@"%@,%@" , [e name], [e reason]);
}
@finally
{
//對錯都執行的部分
}
說明:
- [e name]取得錯誤名稱
- [e reason]取得錯誤原因

8. 自行拋出錯誤

[NSException exceptionWithName:@"錯誤名稱" reason:@"錯誤原因" user:nil];


9. 靜態屬性
- Objective-c沒有靜態屬性,所以是以C++的語法,寫在import之後,@interface之前。

static int count;

使用時,必須要先告知編譯器要使用外部的屬性

extern int count;
count++;


10. 靜態方法
於h檔與m檔中,以+號開頭

11. 補充類別(Category)
h檔

#import "ola.h"

@interface ola (olaOps)
- (void) size;
@end
說明:
- #import "ola.h":import要被補充的內容
- @interface ola (olaOps):olaOps類別名稱,ola 未被補充的類別

m檔

#import "olaOps.h"

@implementation ola(olaOps)

- (void) size
{
NSLog(@"17");
}

@end
說明:
- 實際使用時,類別與補充類別都要import,Xcode才會有提示可以使用。
- 可以利用該方式,補充NSString,NSObject等基本類別。

12. 通訊協定(Protocol)
- 類似其他語言的interface的概念。
- 使用時使用大括號,多個Protocol用逗點隔開。
- 可利用@required與@optional來指定是否一定要實做。

13. 前處理(define)
- 告知編譯器要置換的文字(replace的概念)

#define ola ABCDEFG
說明:
- 程式中看到ola的字樣,會先置換成ABCDEFG,編譯器才會編譯。
- 後面沒有";",中間沒有"="

-------------------------------------------------------

對沒碰過的人來說,內容真的很多。

沒有留言:

張貼留言