Objective-C İle Diziler

On 08 Şubat 2012, in Objective-C, by admin

Objective-C dilinde yaygın olarak iki türde dizi yapısı kullanılmaktadır. NSArray ve NSMutableArray… Her iki referans türü de temelde aynı işi yapmakla birlikte aslında aralarında önemli bir fark vardır. NSArray immutable (değişmez), NSMutableArray ise mutable (değişken) yapıya sahiptir. Bunun anlamı şudur: NSArray yapısı tanımlandıktan ve içeriği oluşturulduktan sonra (içerik ekleme hariç) değiştirilemez ancak, NSMutableArray bize ekleme, silme, değiştirme gibi tüm imkanları sağlayan bir yapıya sahiptir. Örnekler üzerinden gidelim…

NSArray Örneği:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{
    @autoreleasepool {

        // initWithObjects ile tanımlarken içerik ekliyoruz.
        NSArray * gunler = [[NSArray alloc] initWithObjects: @"pazartesi", @"sali", @"carsamba", @"persembe", nil];

        // NSArray türündeki diziye içerik ekleme
        gunler = [gunler arrayByAddingObject:@"cuma"];
        gunler = [gunler arrayByAddingObject:@"cumartesi"];
        gunler = [gunler arrayByAddingObject:@"pazar"];

        NSLog(@"%@", gunler);

        // ya da döngüyle içeriği okuyabiliriz
        for (NSString * gun in gunler) {
            NSLog(@"%@", gun);
        }

        // indeksi verilen elemanın değerini almak
        NSLog(@"%@", [gunler objectAtIndex:1]);
        // "sali" döner

        // değeri verilen elemanın indeksini almak
        NSLog(@"%lu", [gunler indexOfObject:@"carsamba"]);
        // "2" döner.

        // dizinin eleman sayısını almak
        NSLog(@"%lu", [gunler count]);
        // "7" döner.
    }
    return 0;
}

Dizinin tanımının sonundaki nil ifadesi dizinin son indeksinin bulunduğu konumu işaret eder ve initWithObjects ya da arrayWithObjects metotları ile oluşturulurken gereklidir. En sondaki @”%lu” ifadesi indexOfObject metodu NSUIntenger (unsigned long) türünde değer döndürdüğü içindir.

NSMutableArray Örneği:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        // initWithObjects ile tanımlarken içerik ekliyoruz.
        NSMutableArray * aylar = [[NSMutableArray alloc] initWithObjects: @"ocak", @"subat", @"mart", @"nisan", nil];

        // diziye eleman ekleme
        [aylar addObject:@"mayis"];
        [aylar addObject:@"haziran"];
        [aylar addObject:@"temmuz"];
        [aylar addObject:@"agustos"];
        [aylar addObject:@"deneme"];
        [aylar addObject:@"eylul"];
        [aylar addObject:@"ekim"];
        [aylar addObject:@"kasim"];
        [aylar addObject:@"aralik"];

        NSLog(@"%@", aylar);

        // dizideki bir elemanın indeksiyle içeriğini değiştirme
        // "deneme" yi "yanilma" olarak değiştiriyoruz
        [aylar replaceObjectAtIndex:8 withObject:@"yanilma"];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir elemanın değeriyle (object) içeriğini değiştirme
        // önce "yanilma" nın ideksini alıyoruz
        NSUInteger yanilmanin_indeksi = [aylar indexOfObject:@"yanilma"];

        // "yanilma" yı "degistirilmis" olarak değiştiriyoruz
        [aylar replaceObjectAtIndex:yanilmanin_indeksi withObject:@"degistirilmis"];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir indekse eleman ekleme (insert)

        [aylar insertObject:@"araya eklenmis" atIndex:8];

        NSLog(@"%@", aylar);

        /*****************************************************/

        // dizideki bir elemanı silme

        [aylar removeObject:@"araya eklenmis"];
        [aylar removeObjectAtIndex:8]; // "degistirilmis" silinecek

        NSLog(@"%@", aylar);

        /*****************************************************/
        // dizinin eleman sayısını almak
        NSLog(@"%lu", [aylar count]);
        // "12" döner.
    }
    return 0;
}

Görüldüğü gibi NSMutableArray yapısı bize daha fazla hareket imkanı sağlıyor. O nedenle bu yapı Objective-C içindeki en ideal dizi yapısı. Elbette yapının tüm imkanları bu kadar değil. Burada sadece en temel olanlarından söz ettim.

Faydalı olması dileğiyle…

Tagged with:  

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>