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…
