Mobil Programlama

iOS

DERS PROGRAMI
iOS 201 Ders Programı

Dinamik Bağlama, id Veri Tipi

Lisans: Creative Commons 11.12.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Bazı durumlarda, tanımlanan veri tipinin (genel veri tipi, id) hangi türde veri taşıyacağı önceden belli değildir ve gerekli kontroller derleme zamanında değil program çalıştırıldığında yapılır. Bu işlem dinamik tip belirleme ya da dinamik bağlama adını alır. Aşağıdaki kodu inceleyiniz:

#import 

@interface DikDortgen:NSObject
{
    int genis;
    int yuksek;
}
-(void) genAta:(int) g veYuks: (int) y;
-(int) alan;
-(int) cevre;
@end

@implementation DikDortgen
-(void) genAta:(int) g veYuks: (int) y;
{
    genis=g;
    yuksek=y;
}
-(int) alan
{
    return genis*yuksek;
}
-(int) cevre
{
    return 2*(genis+yuksek);
}
@end
@interface Daire:NSObject
{
    float ycap;
}
-(void) ycapAta: (int) r;
-(float) alan;
-(float) cevre;
@end

@implementation Daire
-(void) ycapAta: (int) r
{
    ycap=r;
}
-(float) alan
{
    return 3.14159*ycap*ycap;
}
-(float) cevre
{
    return 2*3.14159*ycap;
}
@end

int main(int argc,const char *argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];

    DikDortgen *d = [[DikDortgen alloc] init];
    Daire *dr=[[Daire alloc] init];
    [d genAta:3  veYuks: 10];
    [dr ycapAta: 7];
    NSLog(@"Dikdörtgen Alanı=%d",[d alan]);
    NSLog(@"Dikdörtgen Çevresi=%i",[d cevre]);
    NSLog(@"Dairenin Alanı=%f",[dr alan]);
    NSLog(@"Dairenin  Çevresi=%f",[dr cevre]);
    [d release];
    [dr release];
    [pool drain];
    return 0;
}

Programın çıktısı şu şekilde olacak:

Dikdörtgen Alanı=30
Dikdörtgen Çevresi=26
Dairenin Alanı=153.937912
Dairenin Çevresi=43.982262

 

ID Veri Tipi

Objelerin hafızadaki yerini takip etmek için pointer kullanılması gerekmektedir. Objective- C'nin dinamik yapısı sebebiyle objenin class bilgilerine girmeden id tanımlamasıyla tüm objeleri kapsayan tanımlamalar yapabilirsiniz.

id someObject = @"Hello, World!";
[someObject removeAllObjects];

Aynı işlemi id şeklinde tanımlamak yerine NSString type'ında tanımlama yapılabilirdi. Bu tanımlamayla birlikte removeAllObjects metodu çalıştırılamayacaktı. Çünkü NSString böyle bir metoda sahip değil. id veri tipi tüm metodlara sahip olduğu için kullanım kolaylığı sağlıyor.

Bu kodun sorunsuz çalışması için Build Setting kısmından Automatic Referance Counting değerini No şeklinde çevirmelisiniz.