- OC提??供了兩個保留字self和super
- OC語言中的self,就相當于C++、Java中的this指針。
- 要理解什么是self,什么是成員變量,什么是對象方法,什么是類方法
- 成員變量:成員變量是一個實例對象的具體狀態特征,并且這些狀態特征是可以改變的,如張三的年齡,身高,體重等
- 對象方法:一個實例對象的行為,比如張三具有吃的行為,張三做出這樣行為的時候,有可能會影響,自身的某些狀態特征,比如張三吃可能會增加張三體重和身高。
- 類方法:類方法是某個類的行為,可以直接通過類名調用;如果在類方法中需要使用某些數據,必須通過參數傳入;它不能訪問成員變量。
1.類方法中的self
- 在整個程序運行過程中,一個類有且僅有一個類對象。
- 通過類名調用方法就是給這個類對象發送消息。
- 類方法的self就是這個類對象
- 在類方法中可以通過self來調用其他的類方法
- 不能在類方法中去調用對象方法或成員變量,因為對象方法與成員變量都是屬于具體的實例對象的。
2.對象方法中的self
- 在整個程序運行過程中,對象可以有0個或多個
- 通過對象調用方法就是給這個對象發送消息
- 對象方法中self就是調用這個方法的當前對象。
- 在對象方法中,可以通過self來調用本對象上的其他方法
- 在對象方法中,可以通過self來訪問成員變量
3.全局變量成員變量局部變量
- 全局變量:只要是有聲明它的地方都能使用
- 成員變量:只能在本類和其子類的對象方法中使用
- 局部變量:只能在本函數或方法中使用
- 從作用域的范圍來看:全局變量 > 成員變量 > 局部變量
- 當不同的作用域中出現了同名的變量,內部作用域的變量覆蓋外部作用域變量,所以同名變量的覆蓋順序為:局部變量覆蓋成員變量,成員變量覆蓋全局變量
- 如果在對象方法中出現與成員變量同名的局部變量,如果此時想使用該成員變量可以通過self->成員變量名的方式
4.self總結
- 誰調用self所在的方法,那么self就是誰
- self在類方法中,就是這個類的類對象,全局只有一個,可通過self- 調用本類中的其他類方法,但是不能通過self來調用對象方法或訪問成員變量
- self在對象方法中,就是調用這個方法的那個對象, 可以通過self調- 用本類中其他的對象方法,訪問成員變量,但不能通過self調用本類的類方法。
- 通過self調用方法的格式:[self 方法名];
- 通過self訪問成員變量格式:self->成員變量名
5.self使用注意
- 同時有對象方法和類方法存在的時候,self不會調錯
- self只能在方法中使用;不要使用self來調用函數,也不可以在函數內部使用self;
- 使用self調用本方法,導致死循環調用。