Objective-c中的posing

來源:互聯網
上載者:User

        Posing,顧名思義,意思是“冒充”,它跟categories類似,但本質上不一樣,Posing存在的目的在於子類可以冒充父類,使得後續的代碼無需把父類修改為子類,就可以很方便的讓父類表現成子類的行為,從而實現非常方便的冒充,這在一般的語言中是難以想象的。
       它允許你擴充一個class,並且全面的冒充這個super class,比如:你有一個擴充NSArray的NSArrayChild對象,如果你讓NSArrayChild冒充NSArray,則你程式碼所在的NSArray都會自動替換為NSArrayChild。注意,這裡不是指代碼替換,而是NSArray所在地方的行為都跟NSArrayChild一樣了。
       例子:
1,定義父類:

Fraction.h:

#import <Foundation/NSObject.h>@interface Fraction : NSObject{   int numerator;   int denominator;}-(id)initWithNumeration:(int)a:denominator:(int) b;-(void) print;@end

Fraction.m:

#import <stdio.h>#import "Fraction.h"@implementation Fraction-(id)initWithNumeration:(int)a:denominator:(int) b {           self = [super init];    if(self) {       numerator   = a;       denominator = b;    }    return self;}-(void) print {   printf("Fraction: %i/%i", numerator, denominator);}@end

2,定義子類:

FractionChild.h:

#import "Fraction.h"@interface FractionChild : Fraction -(void) print;@end

FractionChild.m:

#import <stdio.h>#import "FractionChild.h"@implementation FractionChild-(void) print {   printf("FractionChild: %i/%i", numerator, denominator);}@end

3, 開始用FractionChild 冒充Fraction
main.m:

#import <stdio.h>#import "Fraction.h"#import "FractionChild.h"int main(int agrc, const char * agrv[]) {     Fraction *frac = [[Fraction alloc]initWithNumeration:3:denominator:4];     [frac print]; //此時輸出:Fraction: 3/4     //make FractionChild posing as Fracition,注意:poseAsClass這個方法是NSObject的一個內建方法,用於子類posing父類。     [FracitonChild poseAsClass [Fraction class]];     Fraction *frac2 = [[Fraction alloc]initWithNumeration:3:denominator:4];     [frac2 print]; //此時輸出:FractionChild: 3/4,此時的Fration表現行為便被FractionChild冒充了     [frac release];     [frac2 release];}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.