說明:這個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代表着當前方法的調用者