oc基本知識

2021-09-28 19:11:40 字數 4201 閱讀 3276

**件

#import 

@inte***ce

student

:nsobject

-(instancetype) initwithname:

(nsstring *

)name id:

(nsstring *

) idnum;-(

void

) showinfo;

@end

m檔案

#import 

"student.h"

@implementation student

-(instancetype) initwithname:

(nsstring *

)name id:

(nsstring *

) idnum

return self;}-

(void

) showinfo

@end

呼叫

#pragma 建構函式

student *s=[[

student alloc] initwithname:

@"andy" id:

@"01"];

[s showinfo]

;

block為可以實現特定功能的模組,跟c#中採用lamda表示式定義的委託相似.

block定義

typedef int

(^blockdef)

(int

,int

);

block使用

#pragma block 類似c#中用lamd定義的委託

blockdef sumblock=^(

int a,

int b)

;nslog

(@"block get sum:%d"

,sumblock(1

,2))

;

類似於c#中的介面

定義,protocol只需要定義方法,在繼承此協議的類中去實現

@protocol myprotocol 

@required//必須實現-(

void

) method1;-(

void

) method2;

@optional//可以不實現-(

void

) method3;

@end

定義乙個類去繼承上述協議並實現此協議

#import 

#import

"myprotocol.h"

@inte***ce

worker

:nsobject

@end

#import 

"worker.h"

@implementation worker-(

void

)method1-(

void

)method2

@end

#pragma protocol 類似介面

worker *w =

[worker new]

;[w method1]

;[w method1]

;

通過分類可以實現方法的擴充套件,擴充套件原生的類,可以實現增加方法,方便協作,如下類為person類,通過personpp(檔名)對其進行分類擴充套件,語法為person(分類名)

person.h

#import

@inte***ce person : nsobject

@end

person.m

#import "person.h"

@implementation person

//-(void) dealloc

////-(void) push

//@end

personpp.h

#import

#import "person.h"

@inte***ce

person

(plus)-(

void

) punch;

@end

personpp.m

#import "personpp.h"

@implementation

person

(plus)-(

void

) punch

@end

main中呼叫

#pragma 分類:建立類的乙個分支(擴充套件原類),可以訪問原來類的公共變數,具有可繼承性

person *p=

[person new]

; p->_name=

@"andy"

;[p punch]

;中無此方法,通過personpp.h擴充套件了person類

類擴充套件與分類類似,類擴充套件只要擴充套件標頭檔案即可,方法在原類中實現,還是以上述(四)中的person類為例,語法為person()

擴充套件標頭檔案personext.h

#import

#import "person.h"

@inte***ce

person()

-(void

) push;

@end

擴充套件標頭檔案中,增加了push方法,所以在person.m中可以直接實現,見(四)中person.m中注視掉的push方法

#pragma 類擴充套件 類名 +()

//第一種擴充套件方法:新建標頭檔案personext.h,定義擴充套件方法,在person.m中實現此方法,此時p1可訪問personext.h中的變數

person *p1=

[person new]

; p1->_name=

@"andy"

;[p1 push]

;//第er種擴充套件方法:將檔案personext.h內容直接寫入person.m中,並在person.m中實現擴充套件方法,此時p1無法訪問personext.h中的變數

#import

#import "student.h"

#import "person.h"

#import "worker.h"

#import "personpp.h"

#import "personext.h"

typedef

int(

^blockdef)

(int

,int);

intmain

(int argc,

char

* ar**)

;nslog

(@"block get sum:%d"

,sumblock(1

,2))

;#pragma protocol 類似介面

worker *w =

[worker new]

;[w method1]

;[w method1]

;#pragma 分類:建立類的乙個分支(擴充套件原類),可以訪問原來類的公共變數,具有可繼承性

person *p=

[person new]

; p->_name=

@"andy"

;[p punch]

;中無此方法,痛毆personpp.h擴充套件了person類

#pragma 類擴充套件 類名 +()

//第一種擴充套件方法:新建標頭檔案personext.h,定義擴充套件方法,在person.m中實現此方法,此時p1可訪問personext.h中的變數

person *p1=

[person new]

; p1->_name=

@"andy"

;[p1 push]

;//第er種擴充套件方法:將檔案personext.h內容直接寫入person.m中,並在person.m中實現擴充套件方法,此時p1無法訪問personext.h中的變數

return0;

}}

OC屬性 建構函式的基本知識

屬性 某種事物的特徵 setter 設定者 void setname nsstring name getter 獲取者 nsstring name setter 公式 void set 屬性名 屬性型別 形參名 getter 公式 屬性型別 屬性名 點語法 又叫屬性 可以通過 給屬性 賦值取值 屬性...

OC字串的基本知識

import 結構體的關鍵字 struct 乙個整體 由不同資料型別組成的乙個整體 typedef struct person person intmain intargc,const char argv nsstring result 武松打虎 duang duang duang 老虎跑下山 ya...

Oracle 基本知識

乙個表空間只能屬於乙個資料庫 每個資料庫最少有乙個控制檔案 建議3個,分別放在不同的磁碟上 每個資料庫最少有乙個表空間 system表空間 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應存放資料字典 每個資料庫最少有兩個聯機日誌組,每組最少乙個聯機日誌檔案 乙個資料...