OC筆記 - 特有語法(2015.1.30)

1.特有語法

@property 是一個編譯器特性,用來自動生成成員變量的get/set方法聲明(xcode4.4以前)

 > 告訴property要生成的get/set方法聲明的成員變量類型是什麼

 > 告訴property要生成的get/set方法是哪個屬性的,屬性名稱去掉下劃線

 


@property int age;//注意:這個地方成員變量的名稱寫去掉下劃線後的

 

2.synthesize

@synthesize用來自動生成get/set方法的實現

@synthesize age 意思是給.h文件中名稱叫做age的property生成實現

@synthesize age= _age;

 

如果沒有明確告訴synthesize後面的age要賦值給誰它就會賦值給和它同名的成員變量

@synthesize age;

 

3.property增強

xcode4.4以後property做了增強

 > 幫助我們自動生成get/set方法的聲明

 > 幫助我們自動生成get/set方法的實現

 > 如果沒有手動聲明成員變量,perperty會在.m文件中自動幫我們生成一個_開頭的成員變量

 

 >注意點:如果想讓子類繼承父類的成員變量,還是必須在.h中手動寫成員變量

 

4.get/set方法重寫

重寫set方法

1.當想控制外界傳入的一些數據的合理性安全性的時候我們就需要手動實現set方法

- (void)setAge:(int)age
{
    _age = age;
    if (_age < 0) {
        _age = 0;
    }
}

2.當我們手動同時實現了set/get方法的時候,property就不會自動給我們生成成員變量

 

5.OC私有方法

只有實現,沒有聲明我們稱之爲私有方法

 

6.id類型

id ==NSObject *

id的本質: typedef struct objc_object *id;

如果用id類型接收一個對象,調用對象特有方法不用進行強制類型轉換

id 是一個萬能指針,可以用來指向任何對象,注意id後面不要加*

 

7.構造方法基本概念

> 開闢存儲空間  +alloc //用來開闢存儲空間,會返回一個沒有初始化的對象

> 初始化成員變量 -init // 對對象中的成員變量進行初始化,返回一個初始化後的對象

> 返回地址

 

開闢存儲空間,會返回一個沒有初始化的對象

對對象中的成員變量進行初始化,返回一個初始化後的對象

 

開發中常用寫法

如果想讓對象一出生它的某些屬性就是一些固定的值,我們可以重寫init方法

 

init方法的作用 :用於對類的成員變量進行初始化


重寫NSObject的init初始化方法注意點:

>一定要調用super init 方法,初始化父類的東西

>一定要判斷self是否爲nil

>一定要返回self

- (id)init
{
    self = [super init];// 如果父類初始化失敗會返回nil
    if (self != nil) {
//        說明父類初始化成功,我們纔開始初始化子類特有的東西
        _age = 18;
    }
    return self;
}

注意點:初學者記住不要寫成(self == [super init](錯誤寫法)

    if (self = [superinit]) {


oc 當中使用nil調用方法(發送消息),不會報錯


9.自定義構造方法

當想讓某個對象一出生就擁有指定的屬性的時候就可以使用自定義構造方法

 

// 自定義構造方法純粹就是自己按照一定的約定書寫的一個方法

> 一定是對象方法 -號開頭

> 方法名稱一般以init開頭

> 返回值一般是id

 

11.new方法原理

+ (id)person
{
//    return [[Person alloc]init];
//    self 誰調用就代表誰,提高擴展性
    return [[self alloc]init];
}
+ (id)personWithAge:(int)age
{
    Person *p = [self person];
    [p setAge:age];
    return p;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章