Objective-C 中便利初始化方法和指定初始化方法

來源:互聯網
上載者:User

標籤:objective   方法   initwithformat   

初始化 之 便利初始化和指定初始化便利初始化方式便利初始化方式一
-(id) initWithFormat:(NSString *) format,...;   
  • 初始化了一個新的字串作為格式化操作的結果. 下面就是一個小例子
//按格式返回字串NSString *myString = [[NSString alloc] initWithFormat:@"myString has %dletter",8];       NSLog(@"%@",myString);  

其結果是列印出一句話: myString has 8 letter

便利初始化方式二
* -(id) initWithContentOfFile:(NSString*) path encoding:(NSStringEncoding) enc error:(NSError**)error
  • 功能是利用讀取檔案內容來初始化,初始化一個字串對象
  • encoding 用於說明檔案的編碼格式,比如 GBK UTF8等,一般來說沒有特殊情況,使用NSUTF8StringEncoding.
  • error 參數如果正常初始化了,則返回 nil, 否則返回錯誤資訊,這些資訊封裝成 NSError 對象,可以使用%@格式符列印出來,也可以使用 NSError 的對象方法: localizedDescription 列印錯誤資訊.
  • 注意: error 是指標的指標

下面是一個利用開啟檔案並且讀取檔案內容初始化的例子:

 NSError *error = nil; NSString *fileContent = [NSString stringWithContentsOfFile:@"/Users/qingyun/  Desktop/anotherTest.txt" encoding:NSUTF8StringEncoding error:&error];NSString *fileContent = [[NSString alloc] initWithContentsOfFile:@"/Users/ qingyun/Desktop/anotherTest.txt" encoding:NSUTF8StringEncoding error:&error];      // error 是指標的指標     if (nil != error) {       NSLog(@"%@",error);       exit(1);   }NSLog(@"File content:%@",fileContent);
指定初始化方式便利建構函式的缺點

  
   在子類化的時候,為了保證父類能正常初始化,就需要重寫父類所有的初始化方法和便利初始化方法,並添加子類成員變數的初始,這樣就會導致,當父類修改或者添加初始化方法的時候,子類需要做相應的修改。這樣的設計偏離了高內聚低耦合的設計原則。

指定初始化函數

   類中的某個初始化方法被指派為指定初始化函數,該類的所有初始化方法都使用指定初始化方法執行初始化操作.而子類使用其超類的指定初始化方法進行超類的初始化.
   一般情況下,接收參數最多的初始化方法是最終的指定初始化方法,因為它的初始化資訊比較全面.因此,對於子類來說,只要重寫父類的指定初始化方法,就可以解決便利初始化方法的缺點.

下面舉一個例子,構建一個 QYTire 的類,它有兩個成員變數,壓力和花紋,還有一些對應的方法,在其對應的標頭檔(. h) 中,代碼如下: 

#import <Foundation/Foundation.h>@interface QYTire : NSObject//{//    float myTirePresure;//}@property float pressure;@property float treadth;- (id)initWithPressure:(float)pressure;- (id)initWithTreadth:(float)treadth;- (id)initWithPressure:(float)pressure andTreadth:(float)treadth;@end

在實現檔案中,代碼如下:

- (id)init{    self = [self initWithPressure:30.5f andTreadth:20.6f];    if (self) {    }    return self;}- (id)initWithPressure:(float)p{    self = [self initWithPressure:p andTreadth:20.6f];    if (self) {    }    return self;}- (id)initWithTreadth:(float)t{    self = [self initWithPressure:30.5f andTreadth:t];    if (self) {    }    return self;}//指定初始化方法- (id)initWithPressure:(float)p andTreadth:(float)t{    self = [super init];    if (self) {        self.pressure= p;        _treadth = t;    }    return self;}

建立一個子類 AllWeatherTire,繼承於 QYTire,由於它繼承了超類中的方法,當其在子類中要使用這些方法時,要重寫這些方法.如果使用指定初始化方法時,當父類方法出現變動時,只需要重寫子類中的指定初始化方法即可.

//標頭檔AllWeatherTire.h#import "QYTire.h"@interface AllWeatherTire : QYTire//{//    float rainHanding;//    //}@property float rainHanding;@property float snowHanding;- (id)initWithRainHanding:(float)rainHanding;- (id)initWithSnowHanding:(float)snowHanding;@end//實現檔案AllWeatherTire.m#import "AllWeatherTire.h"@implementation AllWeatherTire- (id)initWithPressure:(float)p andTreadth:(float)t{    self = [super initWithPressure:p andTreadth:t];    if (self) {        self.snowHanding = 300.2f;        self.rainHanding = 200.3f;    }    return self;}- (id)initWithSnowHanding:(float)s{    self = [self initWithSnowHanding:s  andRainHanding:200.3f];    if (self) {    }    return self;}- (id)initWithRainHanding:(float)r{    self = [self initWithSnowHanding:300.2f andRainHanding:r ];    if (self) {    }    return self;}// 子類的也可以使用指定初始化方式- (id)initWithSnowHanding:(float)s andRainHanding:(float)r{    self = [super init];    if (self) {        self.snowHanding = s;        self.rainHanding = r;    }    return self;}- (NSString *)description{    return [NSString stringWithFormat:@"%.1f,%.1f,%.1f,%.1f", [self pressure] ,[self treadth],self.rainHanding,self.snowHanding];}@end

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Objective-C 中便利初始化方法和指定初始化方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.