Objective-C基礎2

16.繼承xcode

1)不能和父類定義同樣的變量spa

2)單一繼承,不支持繼承多個類指針

3)支持多層繼承子類也能夠被繼承code

17.實例變量修飾符orm

public:公開的,在其餘類中也能夠訪問對象

protected:受保護的類型,只能在當前類和子類中訪問blog

private:不能直接訪問繼承

.h文件中沒有聲明的變量和方法,只在.m文件中定義,不能被繼承和使用ip

18.%@打印對象的地址,默認調用對象的description方法,能夠重寫此方法get

19.多態:不一樣的對象以本身的方式響應相同名稱方法的能力稱爲多態

父類指針指向子類的對象

20.類的本質是類對象

1)Class c1=[d class];Class c1=[d1 class];若是d和d1是同一個類的對象,那個c1和c2指向相同的地址

2)獲取方式,經過實例對象獲取Class c1=[d class];,經過類名獲取Class c1=[Dog class]; 

3)類對象的使用,代替類名new對象

21.SEL s1=@selector(test)//手動把test方法包裝成sel類型

[p performSelector:s1];//向test方法發送sel消息,這兩句話至關於[p test];

22.點語法的本質是調用getter、setter方法,不是訪問成員變量

對象.屬性=...;//替換爲set方法

...=對象.屬性;//替換爲get方法

23.@property的使用

寫在聲明文件中,至關於定義get、set方法聲明

複製代碼
#import <Foundation/Foundation.h>

@interface Animal : NSObject
{
    int _age;
}

@property int age;

//-(void)setAge:(int)age;
//-(int)age;

@end
複製代碼

24.@synthesize的使用

寫在實現文件中至關於註釋部分的代碼

複製代碼
#import "Animal.h"

@implementation Animal

@synthesize age;

//-(void)setAge:(int)age{
//    self->age=age;//@synthesize age會自動新建一個age實例變量
//}
//-(int)age{
//    return self->age;
//}

@end
複製代碼

@synthesize age=_age;//指定實例變量名,不會操做默認的變量

至關於:

//-(void)setAge:(int)age{
//    _age=age;
//}
//-(int)age{
//    return _age; 
//}

xcode4.4以後,能夠只使用@property而不使用@systhesize,而且不用定義帶有下劃線的變量

操做的是帶有下劃線的實例變量,若是當前類沒有下劃線的實例變量,則系統會幫咱們生成。注意該變量是私有的(相對的,隱藏的)子類看不到

@property的加強型,在.m文件中重寫get、set方法,可是不能同時重寫,只能重寫一個

25.動態類型和靜態類型

動態類型:父類的指針指向子類的對象

靜態類型:

26.id的使用,id是一個萬能指針,能夠指向任何對象

NSObject和id均可以指向任何對象

NSObject對象會進行編譯時檢查(須要強制類型轉換)

id不須要強制類型轉換,id能夠直接用

編譯器看到id之後,認爲是動態類型,再也不檢查

id obj=[Animal new];

27:動態綁定,內省

動態類型檢測:

1)判斷類型

1))判斷某個對象是不是類的實例對象,或者子類的事例對象

BOOL isKind = [ani isKindOfClass:[Animal class]];(對象和類)

2))判斷是不是這個類的事例,無論是不是這個類的子類的事例

isMemberOf(對象和類)

3))判斷是不是子類的事例

isSubClassOfClass

BOOL isKind = [Dog isSubClassOfClass:[Animal class]];(類和類)

 2)方法響應的檢測

1))判斷對象可否響應指定的方法:

respondsToSelector:方法的SEL

2))判斷類可否響應指定的方法

instanceResponseToSelector:方法的SEL

3)響應方法

無參:performSelector:SEL

有一個參數:performSelector:SEL withObject:@"參數"

 有兩個參數:performSelector:SEL withObject:@"參數" withObject:@"參數2"

28.構造方法init,是一個對象方法,返回的是一個對象-調用init方法的對象

29.重寫構造方法

複製代碼
-(instancetype)init{
    self = [super init];
    if(self){
        _age=10;
    }
    return self;
}
複製代碼
相關文章
相關標籤/搜索