物件方法 nil值

2021-07-22 02:09:59 字數 4058 閱讀 2357

1.定義乙個學生類(有方法)

無引數方法宣告:

- (void)dohomework;

- (返回值型別)方法名;"注意寫**的位置在哪?

無引數方法實現:

- (void)dohomework

- (返回值型別)方法名 "注意寫**的位置在哪?

2.建立物件呼叫方法

格式:[物件名 方法名];

"**如下

#import

/*student

屬性:名字,年齡,學號,成績

方法:做作業,聽**

*/@inte***ce student : nsobject

//方法的宣告

//- (返回值型別)方法名;

/*** 做作業方法的宣告

*/- (void)dohomework;

/*** 聽**方法的宣告

*/- (void)tingyinyue;

@end

@implementation student

//方法的實現

/*** 做作業方法的實現

*/- (void)dohomework

/*** 聽**方法的實現

*/- (void)tingyinyue

@end

int main(int argc, const char * argv)

```* 帶1個引數的方法的宣告實現呼叫

「定義乙個狗類,有引數的方法

1.有引數的方法的宣告

- (返回值型別)方法名:(引數型別)引數名字;

- (void)eat:(nsstring *)foodname;

2.有引數的方法的宣告

- (返回值型別)方法名:(引數型別)引數名字{}

- (void)eat:(nsstring *)foodname

//又吃又喝 方法的宣告

- (void)eatanddrink:(nsstring *)foodname :(nsstring *)drinkname;

//求兩個數的和的方法

- (int)sum:(int)num1 :(int)num2;

@end

@implementation dog

//又吃又喝 方法的實現

- (void)eatanddrink:(nsstring *)foodname :(nsstring *)drinkname

- (int)sum:(int)num1 :(int)num2

@end

int main(int argc, const char * argv)

```* 方法的命名規範

建議的方法格式:

- (返回值型別)***with***:(資料型別)引數名 and:(資料型別)引數名;

//學生類有方法: 一邊看書(需要書名) 一邊聽**(需要歌曲名)

//呼叫的時候,上面的方法的方法名字是什麼?readingwithbookname: andmusicname:

[xiaohong readingwithbookname:@」金瓶梅」 andmusicname:@」葫蘆娃」];

1.同乙個類可有 無數個物件 物件之間是毫無關係的

2.每乙個物件 都有乙份自己的成員變數,不受其他物件的影響

3.類 就像一張圖紙,物件通過圖紙製造出來的東西

「練習:

/* 定義乙個手機類,寫屬性 和方法 並且在主函式中呼叫

*/ 「**如下

#import @inte***ce phone : nsobject

//發簡訊

- (void)sendmessage:(nsstring *)message tophonenumber:(nsstring *)phonenumber;

//打**

- (void)callwithnumber:(nsstring *)phonenumber;

//看電影

- (void)lookmovie;

@end

@implementation phone

//發簡訊

- (void)sendmessage:(nsstring *)message tophonenumber:(nsstring *)phonenumber

//打**

- (void)callwithnumber:(nsstring *)phonenumber

//看電影

- (void)lookmovie

@end

int main(int argc, const char * argv)

```

1.以 "-"開頭的方法 叫做物件方法:

顧名思義:只有物件可以呼叫的方法

2.在 "-"方法內部,可以直接訪問屬性,那麼訪問的就是呼叫這個方法的物件的屬性

#import

@inte***ce

pig : nsobject

//叫:在這個方法中 喊出自己的名字 智商 和體重

- (void)bark;

@end

@implementation

pig - (void)bark

@end

int main(int argc, const

char * argv)

```* **類載入**

當我們執行程式,第一次使用某個類的時候,會把類的二進位制載入到記憶體的**段中

* **物件在記憶體中的儲存**

1.在堆區開闢儲存空間

2.在這個空間內根據存在於**段中的類的模板建立乙個類,並具有類所有的屬性,同時,也會在此空間自動加上乙個isa指標,該指標指向了存在於**段中的類,存的是位於**段中的類的位址

3.初始化成員變數的值,基本資料型別初始化為0,c的指標的預設值是null,oc的指標的預設值是nil

4.最後再將存在於堆中的物件的位址返回給宣告在棧區的指標

* **為什麼物件中只有類的屬性和isa指標**

1.在同乙個類中,不同物件所呼叫的方法都是相同的

2.在同乙個類中,不同的物件的屬性值是不一樣的

**所以物件中只儲存自身的屬性,而儲存乙個isa指標指向這個類,就是通過這個isa指標訪問物件中的方法**

* nil值

1.nil

#define nil __darwin_null

#define __darwin_null ((void *)0)

person * p1 = nil;

//讓p1不指向任何物件

2.null

# define null ((void*)0)

int * p1 = null;

//讓p1不指向任何變數

//nil和null本質是完全等價

3.如果乙個物件的指標 是 nil;

通過nil訪問物件的成員變數的時候 程式會崩潰

通過nil呼叫物件的方法的時候,什麼現象都沒有 「`

「` 1.函式是c語言的,由於oc相容c,所以可以在oc的**中定義和使用函式

2.方法是屬於oc的,只能定義在類中.

3.函式和方法定義的位置

1>函式 除了在類宣告部分不能寫,函式內部不能寫,其他任何地方都可以寫.

2>方法 宣告只能在@inte***ce的大括號外 實現只能在@implementation中

4.呼叫形式不同:

1>函式直接呼叫

2>物件方法:只能通過物件來呼叫

「` *注意點

1.@inte***ce和@implemention不能互相巢狀

2.類必須具有類的宣告和實現

3.特殊情況下,可以只有類的實現,而沒有類的宣告

4.類的宣告必須要寫在類的實現之前

5.類的方法只能通過物件來呼叫

6.在宣告類的屬性的時候不能進行初始化

7.當只有類的宣告而沒有類的實現的時候,會報乙個未能識別的方法的錯誤

8.@end不能省略

9.類的宣告必須要放在類使用之前,而類的實現可以放在類使用之後

在table中儲存nil值

在table中,nil不可以作為key,否則會有執行報錯 而且,有時候使用 獲取長度時,會因為nil而導致無法獲取到正確的長度 如下,有乙個函式,它是用來把引數進行反序,使用 獲取長度,但是長度出現了問題 function reverse local t for i 1,t 2 do local j...

獲取物件屬性值的方法

方法1 require watir ie watir ie.new ie.goto def messlg value,re x ie.text field name value to s.each do d x.unshift d end0.upto x.length 1 do t s x t sp...

C 類,物件,屬性,屬性值,方法

閒話少說,直入主題。類 是個抽象的概念,是個模子,確定物件會擁有的特徵 屬性 和行為 方法 是具有相同特徵的一組物件的抽象,類不佔記憶體。物件 看的見,摸得著,特指的,具體的,物件是類的乙個例項,物件佔記憶體。屬性 理解為一種特徵 屬性值 描述這個特徵的值。方法 物件的行為。舉例 區分類和物件 in...