Objective_C_初始化方法

一、繼承 二、super self
三、初始化方法
四、指定初始化方法
五、便利構(gòu)造器

面向?qū)ο蟮娜筇匦?封裝,繼承:?向?qū)ο筇峁┝死^承特性,繼承既能保證類的完整,又能簡化代碼。多肽。。super是編譯器指令,并非對象。
作?:給super發(fā)消息,可以執(zhí)?父類該?法的實(shí)現(xiàn) 。

創(chuàng)建對象分兩步:
1.為對象開辟空間。
2.進(jìn)行初始化操作
初始化?法的主要作用是:為某些實(shí)例變量賦初值。
初始化?法在對象的整個?命周期?只使?一次。
初始化方法是在對象的初始化階段完成其實(shí)例變量的賦值操作,一個對象的初始化階段只有一次,所以初始化方法只使用一次。
- (id)init {
    //給super發(fā)送init消息:執(zhí)行父類中實(shí)現(xiàn)的init方法
    self = [super init];
    //判斷從父類繼承過來的init方法是否初始化成功
    if (self) {
        //初始化設(shè)置
    }
    //返回初始化完成的對象
    return self;
在?身的初始化?法中,優(yōu)先向super發(fā)送init消息,初始化公共變量,初始化成功之后,再初始化?身特有變量,從?完成全部實(shí)例變量的初始化
}

self是系統(tǒng)關(guān)鍵字。 self在方法中指代當(dāng)前方法的調(diào)用者。
self在實(shí)例方法中,指代調(diào)用當(dāng)前方法的對象。
- (void)objectMethod {
    
}
self在類方法中,指代當(dāng)前類。
+ (void)classMethod {
   
}
初始化?法是  “-”方法。
id或者instancetype類型的返回值。
以init開頭。
可以帶0到多個參數(shù)。
內(nèi)部實(shí)現(xiàn):先執(zhí)?super的初始化方法,再初始化?身變量,后return self 
##
便利構(gòu)造器
封裝了對象創(chuàng)建過程:
    內(nèi)部實(shí)現(xiàn):封裝了alloc和初始化操作,創(chuàng)建對象更加方便快捷。
* 便利構(gòu)造器是“+”方法。
* 返回 本類型 的實(shí)例。
* ?法名以類名開頭。
* 可以有0到多個參數(shù)。
* 例如:
聲明
(id)personWithName:(NSString *)name gender:(NSString *)gender;

實(shí)現(xiàn)
+ (id)personWithName:(NSString *)name gender:(NSString *)gender {
    return [[Person alloc] initWithName:name gender:gender];
}

調(diào)用
Person *per = [Person personWithName:@"Frank" gender:@"男"];

繼承:

繼承是?向?qū)ο笕?特性之?,合理的繼承,能減少很多冗余代碼, 加快開發(fā)速度。 
初始化?法以init開頭,在對象的生命周期中只使?一次。 
便利構(gòu)造器封裝了對象的創(chuàng)建過程,進(jìn)?步簡化了對象創(chuàng)建的步驟。

一、setter、getter 二、屬性 三、屬性的特性 四、點(diǎn)語法

什么是setter方法?
    在OC中,為單一實(shí)例變量賦值的方法稱為setter方法(設(shè)置器)。

什么是getter方法?
    在OC中,讀取實(shí)例變量值的方法稱為getter方法(訪問器)。
 舉例: 
  NSInteger _age;
setter方法的書寫格式如下:
  - (void)setAge:(NSInteger)age;
    注意:set+實(shí)例變量名(首字母大寫),忽略下劃線。
getter方法的書寫格式如下:
  - (NSInteger)age;
    注意:返回值類型與變量類型一致,方法與實(shí)例變量名相同,忽略下劃      線。
二、屬性 
屬性是Objective-C  2.0定義的語法,提供setter、getter方法的默認(rèn)實(shí)現(xiàn)。在一定程度上簡化程序代碼,并且提高程序的安全性。
屬性的聲明:在.h文件中使用@property聲明屬性.
以實(shí)例變量_name為例:
 屬性的聲明
  @property NSString *name;

     相當(dāng)于在@interface中聲明了兩個方法:
 setter方法 
  - (void)setName:(NSString *)name;
 getter方法
  - (NSString *)name;
屬性的實(shí)現(xiàn):在.m文件使用@synthesize實(shí)現(xiàn)屬性
以實(shí)例變量_name為例:
屬性的實(shí)現(xiàn)
相當(dāng)于在@implementation實(shí)現(xiàn)了
setter方法
     - (void)setName:(NSString *)name {
    _name = name;
  }
 getter方法
     - (NSString *)name {
    return _name;
  }
原子性控制(nonatomic、atomic)

atomic:原子特性,setter、getter方法在多線程訪問下是絕對安全的,即setter、getter內(nèi)部做了多線程訪問處理。默認(rèn)的原子特性。

nonatomic:非原子特性。setter、getter方法內(nèi)部不會做多線程訪問處理,僅僅是普通的setter、getter方法。
一般都用非原子特性(nonatomic)
例如: @property (nonatomic) NSString *name;
###屬性的特性-語義特性
語義設(shè)置(assign、retain、copy)

如果屬性是非對象類型(比如int、float等) 屬性的語義設(shè)置使用assgin.

如果屬性是對象類型(比如NSString等)屬性的語義設(shè)置使用retain.

如果屬性是對象類型并且想得到對象的副本,使用copy.(對于retain和copy的區(qū)別以及copy的使用場景,在之后講到內(nèi)存管理會詳細(xì)講解)
語義設(shè)置 — assign:
  如果語義設(shè)置的關(guān)鍵字是assign。例如:nonatomic后面跟的是retain或者assign。他倆的區(qū)分:retain跟的是對象類型(NSString*這種類型用retain)assign(如:int)
  @property (nonatomic, assign) NSInteger age;

 setter方法內(nèi)部實(shí)現(xiàn):
  - (void)setAge:(NSInteger)age {
    _age = age;
  }
     
 getter方法內(nèi)部實(shí)現(xiàn):
  - (NSInteger)age {
    return _age;
  }
如果語義設(shè)置的關(guān)鍵字是retain。例如:
  @property (nonatomic, retain) NSString *name;

setter方法內(nèi)部實(shí)現(xiàn):
  - (void)setName:(NSString *)name {
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}

getter方法內(nèi)部實(shí)現(xiàn):
  - (NSString *)name {
    return  [[_name retain] autorelease];
}

點(diǎn)語法的使用

只要符合系統(tǒng)默認(rèn)setter、getter書寫格式的方法都可以使用點(diǎn)語法。   例如:實(shí)例變量_name
setter方法
  [person setName:@"Lily"];
    使用點(diǎn)語法:
  person.name = @"Lily";

getter方法
  NSString *string = [person name];
    使用點(diǎn)語法:
  NSString *string = person.name;

屬性是一對getter、setter方法,點(diǎn)語法是屬性的另一種調(diào)用格式。 

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容