iOS 101Başlangıç seviyesi derslerde iOS uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

Dinamik Bağlama, id Veri Tipi

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 12.05.2016 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c dinamik veri tipi

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.