說明:這個Objective-C專題,是學習iOS開發的前奏,也為了讓有物件導向語言開發經驗的程式員,能夠快速上手Objective-C。如果你還沒有編程經驗,或者對Objective-C、iOS開發不感興趣,請忽略。學習本專題之前,建議先學習C語言專題。
OC中有一個self關鍵字,用法跟Java中的this類似,都是代表著當前方法的調用者。但self和this還是有區別的。
一、Java中的this只能用在動態方法中,不能用在靜態方法中1.在動態方法中使用this關鍵字
1 public class Student {2 private int age;3 public void setAge(int age) {4 this.age = age;5 }6 }
在第4行使用了this,這裡的this代表著調用setAge方法的某個Student對象
2.如果在靜態方法中使用this關鍵字,直接報錯
二、OC中的self既可以用在動態方法中,也可以用在靜態方法中1.self在動態方法中
1 @implementation Student 2 3 - (void)test2 { 4 5 } 6 7 - (void)test3 { 8 [self test2]; 9 }10 11 @end
* 在第3行、第8行定義了2個動態方法
* 在第8行使用了self關鍵字,這裡的self代表著調用test3方法的某個Student對象
* 第8行代碼的作用是調用Student對象的動態方法test2
2.self在靜態方法中
1 @implementation Student 2 3 + (void)test2 { 4 5 } 6 7 + (void)test3 { 8 [Student test2]; 9 10 [self test2];11 }12 13 @end
* 在第3、第7行定義了2個靜態方法,看清楚方法前面的+號
* 再看第10行,這裡用到了self。看清楚了,是在靜態方法test3中用到了self關鍵字
* 一開始就說了,self代表著當前方法的調用者。當前方法是test3,那test3的調用者是誰呢?肯定是Student這個類,因為test3是個靜態方法。因此這裡的self代表著Student這個類
* 因此,第8行、第10行的作用是一樣,都是調用了靜態方法test2
3.self總結
1> 在動態方法中,self代表著"對象"
2> 在靜態方法中,self代表著"類"
3> 萬變不離其宗,記住一句話就行了:self代表著當前方法的調用者