İlk yazıda iOS platformunun genel özellikleriyle başlamıştım.
Biraz daha detaya girerek devam edelim.
Öncelikle asla unutulmaması gereken akıllı telefonlar, tabletler vb. cihazlar sınırlı kaynaklara sahiptirler. Örneğin pil, hafıza, işlemci hızı gibi sınırlamalar bu cihazlarda kendini daha fazla hissettirir. .NET’teki gibi bir garbage collector olmadığından programatik olarak yaşanacak dezavantajları düşünerek yaklaşımımızı oluşturmalıyız. Çünkü hemen her türlü işlem runtime’da gerçekleşir. Server – Client mantığı üzerine kurulu web’den tamamen farklıdır.
Bu noktada hafıza yönetimi bizim için oldukça önemli. Hafıza kavramını biraz hatırlamakta fayda var.
Hafıza bilgisayarların 3 temel bileşeninden biridir. Çalıştırılan programlar ve bunlara ait geçici datalar hafızada saklanır. Bilinen adıyla RAM günümüz bilgisayarlarında kullanılır.
Programcılar için hafızanın 2 temel parçası önemlidir.
Heap ve Stack
Heap ve stack aslında RAM’de saklanan bilgilerdir. Ancak yapıları ve çalışma mantıkları farklı olduğundan ayrı ayrı ele almak daha uygun.
Heap, karmaşık verilerin hafızada saklandığı bölümdür. Örneğin string, object tipindeki değişkenler Heap’te saklanır.
Stack ise hafızada daha ufak bir alana sahiptir. int, double, datetime tipindeki değişkenler burada saklanır.
Property kavramı
Property’ler objective-c için oldukça önemli. iOS 2.0 ile objective-c’ye eklendirler. Güvenlik, hız, UI güncellenmesi gibi konularda önemlidir.
Objective-c’de bir property tanımladığımızda intance’ını alarak kullanılmalıdır. Aksi takdirde compiler hata verecektir. Bir property’nin intance’ını almak için @synthesize direktifi yeterlidir.
Örneğin,
@interface //tüm propertyler öncelikle bu alanda tanımlanmalı
@property (nonatomic, strong) NSString *propertyAdı;
@end
@implementation //tüm propertyler bu alanda synthesize edilmeli.
@synthesize propertyAdı;
@end
Not: nonatomic-atomic kavramı thread ile ilgilidir. Default olarak tüm propertyler atomic özelliktedir.
Strong ? Weak ?
Bir değişkeni strong olarak tanımladığımızda hafızada heap’te bir pointerla çağırdığınız sürece saklanır. Pointer kaldırıldığında hafızadan kaldırılır. Weak değişkenler ise pointerla çağırılsın veya çağırılmasın heap’ta saklanır. Pointer ile çağırıldığında strong olarak değişir.
nil
Herhangi bir objeyi point etmeyen pointer’ın değeridir. Default değer 0 (sıfır) dır. Tüm somut değişkenler (string isim gibi) başlangıçta nil değere sahiptir.
Leave a Reply