OC點語法和變量感化域
1、點語法
(一)熟悉點語法
聲明一個Person類:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;//默許為@protected
}
- (void)setAge:(int)age;
- (int)age;
@end
Person類的完成:
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
_age = age;// 不克不及寫成self.age = newAge,相當與 [self setAge:newAge];
}
- (int)age //get辦法
{
return _age;
}
@end
點語法的應用:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
Person *person = [[Person alloc] init];
//[person setAge:10];
person.age = 10;//點語法,等效與[person setAge:10];
//這裡其實不是給person的屬性賦值,而是挪用person的setAge辦法
//int age = [person age];
int age = person.age;//等效與int age = [person age]
NSLog(@"age is %i", age);
[person release];
}
return 0;
}
(二)點語法的感化
OC設計點語法的目標,是為了讓其他說話的開辟者可以很快的上手OC說話開辟,應用點語法,讓它和其他面向對象的說話如java很像。
(三)點語法的實質
點語法的實質是辦法的挪用,而不是拜訪成員變量,當應用點語法時,編譯器會主動睜開成響應的辦法。切記點語法的實質是轉換成響應的set和get辦法,假如沒有set和get辦法,則不克不及應用點語法。
如:
Stu.age=10;睜開為:[stu setAge:10];
int a=stu.age;睜開為:[stu age];
編譯器若何曉得是set辦法照樣get辦法?重要是看賦值(可使用斷點調試來檢查)。
在OC中拜訪成員變量只要一種方法即便用-> 如stu->age,這類情形請求在@public的條件下。
(四)點語法的應用留意
上面的應用方法是一個逝世輪回:
(1)在set辦法中,self.age=age;相當因而[self setAge:age];
(2)在get辦法中,return self.age;相當因而[self age];
2、變量感化域
(一)變量的感化域重要分為四種:
(1)@public (地下的)在有對象的條件下,任何處所都可以直接拜訪。
(2)@protected (受掩護的)只能在以後類和子類的對象辦法中拜訪
(3)@private (公有的)只能在以後類的對象辦法中能力直接拜訪
(4)@package (框架級其余)感化域介於公有和地下之間,只需處於統一個框架中便可以直接經由過程變量名拜訪
(二)應用留意和彌補
(1)在類的完成即.m文件中也能夠聲明成員變量,然則由於在其他文件中平日都只是包括頭文件而不會包括完成文件,所以在這裡聲明的成員變量是@private的。在.m中界說的成員變量不克不及喝它的頭文件.h中的成員變量同名,在這時代應用@public等症結字也是白費的。
(2)在@interface @end之間聲明的成員變量假如不做特殊的解釋,那末其默許是protected的。
(3)一個類繼續了另外一個類,那末就具有了父類的一切成員變量和辦法,留意一切的成員變量它都具有,只是有的它不克不及直接拜訪。
OC面向對象—繼續
1、根本概念
法式的世界和人類的“對象”世界在思惟上是沒有設麼差別的,富二代繼續了怙恃,天然就具有了怙恃具有的一切資本,子類繼續了父類異樣就具有了父類一切的辦法和屬性(成員變量)。
在這裡植物是貓類和狗類的父類,黑貓和白貓類是貓類的子類。
繼續的利益:
(1)抽掏出了反復的代碼
(2)樹立了類和類之間的接洽
繼續的缺陷:
耦合性太強
2、OC中的繼續
@interface Animal:NSObject
//植物裡繼續了NSObject,取得NSObject類的辦法;
@end
@interface Dog :Animal
//dog類繼續Animal類
@end
留意:OC說話是單繼續說話。在oc說話中,根本上一切類的根類都是NSObject類。
3、繼續的應用留意
(1)編譯器從上往下履行,所以在子類後面至多應當要有父類的聲明;
(2)OC中不許可子類和父類具有雷同稱號的成員變量名;
(3)OC中的子類可以具有和父類雷同稱號的辦法,在子類挪用時,優先去本身的外部尋覓,假如沒有則一層一層的往上找;
提醒:重寫即子類從新完成了父類中的某個辦法,籠罩了父類之前的完成。
表示圖:一共有三個類,Person類繼續了NSObject類,Student類繼續了Person類。
創立一個Student *s=[[Student alloc] init];
此時會把Student類和這個類的父類加載進內存。
提醒:每一個類中都有一個super class指針,該指針指向本身的父類。對象中有一個isa指針,該指針指向挪用該對象的類。
4、繼續和組合
繼續的實用場所:
(1)當兩個類具有雷同的屬性和辦法時,便可以將雷同的屬性和辦法抽取到一個父類中。
(2)當A類完整具有B類中的部門屬性和辦法時,可以斟酌讓B類繼續A類(斟酌),在這類情形下,也能夠斟酌應用組合。
繼續:###是xxx,如狗是植物,可讓狗繼續植物類
組合:###具有xxx,如先生有書,可讓書這個類作為先生類的屬性
5、症結字super
Super症結字,在子類中重寫辦法時,可讓挪用者跳過這一層而挪用父類中的辦法。
感化:
(1)直接挪用父類中的某一個辦法
(2)Super處在對象辦法中,那末就會挪用父類的對象辦法;super處於類辦法中,那末就會挪用父類的類辦法。
應用場景:子類在重寫父類辦法時,想要保存父類的一些行動。
【懂得Objective-C的變量和面絕對象的繼續特征】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!