Objective-C ile ileri seviye metot işlevleri öğrenmek isteyenler için hazırladığımız eğitim içeriğimizle adım adım ilerleyin! Kalıtım, polimorfizm, kategori gibi konuları detaylıca öğrenin ve uygulamalarla pekiştirin Hemen kaydolun!

Teknolojinin hızla geliştiği günümüzde, programlama dilleri de bu hızla gelişmektedir. Objective-C, Apple tarafından geliştirilen bir programlama dilidir ve iOS uygulama geliştirme platformu için kullanılır. Objective-C, nesne yönelimli bir programlama dili olarak, sınıf ve nesne yapısını kullanarak programlama yapmayı sağlar. Bu makalede, Objective-C dilinde ileri seviye metot işlevlerine odaklanacağız.
Objective-C dilinde metodun geri dönüş değerinin değiştirilmesine, bir değere eşitlenmesine ya da manipüle edilmesine olanak sağlayan işlevler vardır. Nesne özelliklerine erişen metotlar da Objective-C dilinde ileri seviye işlevler arasındadır. Ayrıca, getter ve setter metotları kullanılarak nesne özelliklerine erişmek de mümkündür.
Objective-C’de property ve synthesize işlevleri, kod yazımını kolaylaştırmak için kullanılabilecek faydalı özelliklerdir. Bunun yanı sıra, kategorilerin kullanımı da Objective-C dilinde ileri seviye metot işlevlerindendir. Kategori, sınıfın var olan metodlarına yenisini ekleyen bir araç olarak kullanılır.
Objective-C'de tanımlayıcı metodlar, metodların daha anlamlı hale getirilmesinde kullanılır. Bu yöntem, farklı parametrelerle birden fazla metot yaratılmasına olanak tanır. Protokoller de Objective-C dilinde kullanılan bir başka işlevdir. Protokoller, bir sınıfın ne gibi bir davranış sergileyeceği hakkında bilgi sağlar.
Delegate mekanizması, Objective-C dilinde kullanılan ve bir nesnenin diğer bir nesnede bir işlemi tamamlamasına izin veren bir şekilde tasarlanmıştır. PerformSelector yöntemi de ileri seviye metot işlevleri arasındadır. Bu yöntem, bir nesnenin bir işlevine nasıl erişileceğini ve bu işlevin nasıl kullanılacağını belirler. Ayrıca, geri plan işlemi olarak bir fonksiyonun yürütülmesini sağlamak için de kullanılabilir.
Objective-C dilinde ileri seviye metot işlevlerinin kullanımı tamamen programlama konusunda derinleşmek isteyenler için faydalıdır. Bu işlevler, işlemlerin daha hızlı ve verimli bir şekilde yürütülmesine olanak sağlar.
Metotların Geri Dönüş Değerlerinin Manipülasyonu
Objective-C'de metotlar, programlama dillerinde fonksiyonlar olarak bilinen bir yapıdır. Objelerde (nesnelerde) bulunabilen, belirli bir işlevi yerine getirmek için kullanılan metotlar, Objective-C'de oldukça önemli bir yere sahiptir.
Bir metot, belirli bir veri türünden (int, float, char vs.) bir değer döndürebilir. Bu değer, fonksiyonlar arasında kullanılmak veya belirli bir işlevi yerine getirmek için kullanılabilir. Bir metoda ait geri dönüş değeri, yeterli izin verildiğinde manipüle edilebilir.
Bir metodun geri dönüş değerini değiştirmek veya belirtilen bir değere eşitlemek oldukça kolaydır. Geri dönüş tipi void olan bir metoda sahipseniz, işler biraz daha farklı hale gelebilir. Burada, öncelikle metotların geri dönüş değerlerini manipüle etmenin temel yöntemlerine değinilecektir.
- Geri Dönüş Değerini Değiştirmek: Bir metodun geri dönüş değerini değiştirmek için, metot sonrasında gelen return ifadesinde yeni bir değer belirtilmesi yeterlidir. Bu yeni değer, metotun geri dönüş değeri olarak kabul edilir.
- Geri Dönüş Değerini Eşitlemek: Metot sonucu geri dönen değerin, bir değişkene atanması sonucu geri dönüş değeri eşitlenebilir. Böylece, bu değer herhangi bir yerde kullanılmak üzere saklanabilir.
Eğer bir metot, geri dönüş değeri void tipindeyse, değiştirilmesi mümkün değildir. Ancak bir işaretçi (pointer) kullanarak, değişken değerlerine erişim sağlayabilirsiniz. Bu şekilde, belirli bir işlem sonunda, değişkenin değeri değiştirilebilir.
Bir metotun geri dönüş değerinin manipülasyonu, Objective-C'de oldukça kullanışlı bir özelliktir. Bu sayede, metotların esnek ve dinamik bir şekilde kullanılmasını sağlayabilirsiniz.
Nesne Değerleri ve Metotlarının Kullanımı
Objective-C'de nesnelerin özelliklerine ve metotlarına erişmek oldukça basittir. Bir nesnenin herhangi bir özelliğine erişmek için nokta işareti (.) kullanılır. Örneğin, bir "Person" nesnesinin "name" özelliğine erişmek istediğimizde aşağıdaki kodu kullanabiliriz:
Person *myPerson = [[Person alloc] init];NSString *name = myPerson.name;
Bir nesnenin metodu veya fonksiyonu çağırmak için de yine nokta işareti (.) kullanılır. Örneğin, bir "Calculator" nesnesinin "add" metotunu çağırmak istediğimizde aşağıdaki kodu kullanabiliriz:
Calculator *myCalculator = [[Calculator alloc] init];int result = [myCalculator add:4 to:5];
Bir metodun parametrelerine erişmek için ise yine köşeli parantezler ([ ]) kullanılır. Örneğin, bir "Person" nesnesinin "setAge" metotunu çağırmak ve yaşına 30 eklemek istediğimizde aşağıdaki kodu kullanabiliriz:
Person *myPerson = [[Person alloc] init];[myPerson setAge:[myPerson age] + 30];
Bu kod "myPerson" nesnesinin yaşını alır ve buna 30 ekledikten sonra "setAge" metoduyla nesnenin yaşını günceller.
Özetle, nesne özelliklerine ve metotlarına erişmek için nokta işareti (.) ve köşeli parantezler ([ ]) kullanabilirsiniz.
Getter ve Setter Metotlarının Kullanımı
Objective-C’de nesneler için getter ve setter metotları, bir nesnenin özelliklerine erişmek veya bir nesne özelliğinin değerini değiştirmek için kullanılır. Şimdi, bu metotları nasıl oluşturabilir ve kullanabiliriz bakalım.
Getter metodu, bir nesnenin özelliğini geri döndüren bir metottur. Setter metodu ise özelliğin değerini değiştirir ve geri döndürmez. Bu metotlar, nesneye ait bir özellikle ilgili get ya da set eki ile tanımlanırlar.
Getter metodu örneği:
- (int)age { return _age;} |
Burada age özelliği için bir getter metodu tanımlanmıştır. Metot, _age değişkeninin değerini geri döndürmektedir.
Setter metodu örneği:
- (void)setAge:(int)age { _age = age;} |
Burada age özelliği için bir setter metodu tanımlanmıştır. Metot, age değerini _age değişkenine atamaktadır.
Getter ve setter metodlarına ayrıca property ve synthesize işlevleri de eklenebilir. Property, nesne özellikleri için bir değişken tanımlamak ve getter/setter metodlarını otomatik olarak oluşturmak için kullanılır.
Synthesize ise property ile tanımlanan bir değişkenin kullanımını kolaylaştırmak için kullanılır.
- - (int)age;
- - (void)setAge:(int)age;
- @property int age;
- @synthesize age = _age;
Burada, age özelliği için getter ve setter metodları, property ve synthesize işlevleri kullanılmıştır. Property ifadesi değer tipleri için kullanılabilir. Nesne tipleri için, property ile birlikte retain ya da nonatomic kelimeleri de kullanılır.
Property ve Synthesize Kullanımı
Objective-C'de, property ve synthesize işlevleri, sınıfın nesne değişkenlerine erişimi kolaylaştıran özellikleri sağlar. Property kullanarak, bir değişkenin özelliklerini tanımlayabilir ve getter ve setter metodlarını otomatik olarak oluşturabilirsiniz. Synthesize ise bu metodların oluşturulmasını sağlar.
Property tanımlama işlemi, genellikle sınıfın header dosyasında yapılır. Örneğin, "myString" adlı bir değişkenin özelliklerini tanımlamak isterseniz, şöyle bir kod yazabilirsiniz:
@property(nonatomic, strong) NSString *myString;
Bu kod, myString değişkenine erişim sağlamak için getter ve setter metodlarını otomatik olarak oluşturacaktır. nonatomic, güvenli olmayan bir multithreading ortamında verimli çalışması için kullanılan bir özelliktir. strong ise bir weak referansa sahip olması gereken değişkenler için kullanılır.
Synthesize ise implementation dosyasında kullanılır ve getter ve setter metodlarının oluşturulmasını sağlar. Örneğin, yukarıda tanımlanan myString değişkeni için synthesize işlemi şöyle yapılabilir:
@synthesize myString;
Bu işlem, myString değişkenine getter ve setter metodlarını sağlar.
Property ve synthesize kullanımı, Objective-C'de nesne değişkenlerine erişimi kolaylaştırarak zaman ve emek tasarrufu sağlar. Bu özellikleri kullanarak, sınıfın özelliklerini tanımlayabilir ve getter ve setter metodlarını otomatik olarak oluşturabilirsiniz.
Kategori Kullanımı
Objective-C'de kategoriler, bir sınıfın özelliklerini değiştirmeden ona yeni özellikler eklememizi sağlayan kullanışlı bir araçtır. Bir kategori, mevcut bir Objective-C sınıfına yeni özellikler ve metotlar eklemek yerine, sınıfın kendisini değiştirmeden bunları eklememize olanak tanır. Bu, kodun daha temiz ve düzenli olmasını sağlar. Kategorilerin kullanımı, özellikle bir sınıfın bütünlüğünü bozmadan küçük değişiklikler yapmak istediğimizde faydalıdır.
Kategori tanımlarken, bir sınıfın adından sonra parantez açıp kategori adını belirtiyoruz. Ardından, sınıfın var olan metotlarına eklemek istediğimiz yeni özellik ve metotları tanımlıyoruz. Bu işlem, sınıfın değiştirilmeksizin genişletilmesine olanak sağlar.
MyClass.h | MyClass.m | MyClass+Category.h | MyClass+Category.m |
---|---|---|---|
@interface MyClass : NSObject - (void)myMethod; @end | @implementation MyClass - (void)myMethod{ // original method implementation } @end | #import "MyClass.h" @interface MyClass (Category) - (void)myCategoryMethod; @end | #import "MyClass+Category.h" @implementation MyClass (Category) - (void)myCategoryMethod{ // new method implementation } @end |
Bu örnekte görüldüğü gibi, MyClass sınıfının kategorisi olan MyClass+Category.h dosyasında, sınıfa yeni bir metot ekleniyor. Sonra, MyClass+Category.m dosyasında bu metotun uygulanması gerçekleştiriliyor.
Kategori kullanımı, Objective-C kodunu daha modüler hale getirir ve kod tekrarını azaltır. Örneğin, bir uygulamanızda aynı özellikleri barındıran farklı sınıflarınız varsa, bu sınıfların hepsi için ayrı ayrı kod yazmak yerine, bir kategori oluşturarak özellikleri bu kategori altında toplayabilirsiniz. Bu, kodunuzu temiz ve düzenli hale getirir ve tekrarlanan kodları ortadan kaldırır.
Tanımlayıcı Metotlar
Objective-C programlama dilinin gelişmiş özellikleri arasında tanımlayıcı metotlar da yer almaktadır. Bu metotlar, sınıflara yepyeni özellikler eklemek için kullanılır. Tanımlayıcı metotlar, sınıfın adı ve "+" sembolü ile başlar. Bunun arkasından üçlü nokta (…) ve son olarak da metodu tanımlayan bir parametre gelir.
Bir sınıfa, tanımlayıcı metot eklemek için ise, öncelikle sınıfın başlığında tanımlanmalıdır. Parametreler de, sınıfın özelliklerine göre eklenir. Tanımlayıcı metotların kullanımı, sınıfların özelliklerinin daha işlevsel hale getirilmesine olanak tanır. Bu sayede, kullanıcılara daha fazla seçenek sunmak ve programlama esnekliği sağlamak mümkün olur.
Metot İsmi | Parametre | Geridönüş Değeri |
---|---|---|
newWithInfo: | NSDictionary | ID |
initFromJSONFileWithPath: | NSString | ID |
copyObject | Nesne Örneği | ID |
Bir sınıftaki tanımlayıcı metotlara erişmek için, sınıfın küçük boyutlu örneklemeleri kullanılabilir. Tanımlayıcı metotların farklı versiyonları, sınıfın özellikleri ve parametrelerine göre yaratılabilir. Bu sayede, programlama esnekliği daha da artırılmaktadır.
- Bir sınıfa tanımlayıcı metot ekleme işlemi, sınıfın başlığına tanımlanarak yapılır.
- Parametreler, sınıfın özelliklerine göre eklenir.
- Tanımlayıcı metotların kullanımı, sınıfların özelliklerinin daha işlevsel hale getirilmesine olanak tanır.
- Tanımlayıcı metotların farklı versiyonları, sınıfın özellikleri ve parametrelerine göre yaratılabilir.
Bir metot, farklı durumlarda farklı işlevler yerine getirerek programlama esnekliği sağlayabilir. Objective-C'nin tanımlayıcı metotları, programlama dünyasına yeni kapılar açarak bu esneklikte önemli bir yer tutmaktadır.
Protokollerin Kullanımı
Objective-C'de protokoller, nesnelerin birbirleriyle etkileşimini sağlamak için kullanılan bir arayüzdür. Bir protokol, belirli bir set işlevlerin kullanılmasını garanti eder. Nesneler arasında iletişim kurmak için kullanılır ve belirli yöntemlerin ve özelliklerin kullanımını sağlar. Protokoller, programcılara daha fazla özgürlük ve esneklik sağlar ve farklı sınıfların birbirleriyle etkileşimini kolaylaştırır.
Bir protokol oluşturmak için; @protocol anahtar kelimesi kullanılmalıdır. Protokolün yöntemleri; -(void) belirtisi ile belirtilir ve ayrıca opsiyonel (:?) yöntemler de tanımlanabilir. Protokolün başlangıcına almaç ve bitiş şeklinde "< >" işaretleri eklenir.
Örnek: |
---|
@protocol IslemYapabilenNesneler -(void)topla; -(void)cikar; @optional -(void)bol; -(void)carp; @end |
Burada, IslemYapabilenNesneler adında bir protokol tanımlanmaktadır. Bu protokol, topla ve cikar gibi temel matematiksel işlemleri içerir. Ayrıca, bölme ve çarpma opsiyonel olarak tanımlanmıştır.
Bir sınıf, bir protokolü uygulamak istiyorsa; sınıf tanımında <ProtokolAdi> ifadesi kullanılarak protokol bildirilmelidir.
Örnek: |
---|
@interface HesapMakinesi:SınıfAdı < IslemYapabilenNesneler > |
Burada, HesapMakinesi sınıfı IslemYapabilenNesneler protokolünü uyguluyor. Artık HesapMakinesi sınıfı, protokolde yer alan topla, çıkar, bölme ve çarpma yöntemlerini kullanabilir.
Protokoller, Objective-C'de sıklıkla kullanılan bir araçtır. Sınıflar arasında etkileşim ve iletişim sağlar, özellikle uygulamanızda birden fazla sınıfı kullanıyorsanız önemlidir. Bu şekilde kodlar modüler olabilir ve bir sınıfın işlevleri, bu sınıfta tanımlanmayan başka bir sınıf veya nesne tarafından kullanılabilir.
Delegate Mekanizması Kullanımı
Objective-C kullanıcıları için önemli bir konu olan delegate mekanizmasını ele alacağız. Delegate mekanizması, bir sınıf içinde olayların nasıl yönetileceğini tanımlayan bir protokoldür. Bu mekanizma, bir nesnenin diğerine bir görevin yerine getirilmesi için yetki vermesini sağlar.
Delegate mekanizması, bir sınıfın belirli bir işlevi gerçekleştirmesine yardımcı olan diğer bir sınıfın belirli işlevlerini sağlar. Bu mekanizma, nesneler arasında bilgi aktarımını kolaylaştırır ve farklı sınıflar arasındaki iletişimi sağlar. Delegate mekanizması, bir sınıfın olayları yönetmesini sağlar.
Delegate Mekanizması | Açıklama |
---|---|
Ne olduğu | Delegate mekanizması, bir sınıfın belirli bir işlevi gerçekleştirmesine yardımcı olan diğer bir sınıfın belirli işlevlerini sağlar. |
Nasıl kullanılır | Delegate mekanizmasını kullanmak için, bir sınıfın protokollerini belirtmek gerekir ve bu protokollerin içeriğini tanımlamak gerekir. Daha sonra, belirli işlevlere sahip bir delegate nesnesi oluşturulmalı ve birçok delege yöntemi çağrılmalıdır. |
Hangi durumlarda kullanılır | Delegate mekanizması, bir sınıfın olayları yönetmesini sağlar ve farklı sınıflar arasındaki iletişimi sağlar. Bu mekanizma, nesneler arasında bilgi aktarımını kolaylaştırır ve bir sınıfın belirli bir işlevini gerçekleştirirken diğer sınıfların belirli işlevlerini sağlar. |
Delegate mekanizması, Objective-C'de oldukça yaygın bir şekilde kullanılır ve birçok geliştiricinin kullandığı bir modeldir. Bu mekanizmayı iyi anlamak, Objective-C programlama dilinde başarılı bir şekilde kod yazmak için önemlidir.
PerformSelector Kullanımı
Objective-C'de performSelector, çok faydalı bir metot işlevi olarak karşımıza çıkar. Bu işlev, nesnelerin yöntemlerine erişebilmesini ve bu yöntemleri çağırabilmelerini sağlar. Ayrıca, performSelector işlevi, belirli bir gecikme süresi ayarlamak ya da belirli bir süre içinde tekrarlanmasını sağlamak gibi ekstra özelliklere de sahiptir.
PerformSelector işlevi, Objective-C'de yazılan bütün sınıflar tarafından kullanılabilir. Bu işlevi kullanarak, bir sınıfa ait bir nesnenin yöntemlerine, özelliklerine ve değişkenlerine erişebilirsiniz. Bu işlev ayrıca belirli bir sınıfın tüm nesneleri için de kullanılabilir.
PerformSelector işlevi, bir nesnenin yöntemlerine erişmek için kullanılırken, aynı zamanda yöntemin parametrelerinin de doğru bir şekilde belirtilmesi gerekmektedir. Bunun için, performSelector işlevi kullanımında öncelikle ilgili nesnenin işlev adı belirtilir. Ardından işlevde kullanılan tüm parametreler sırayla belirtilir.
PerformSelector işlevi, genellikle bir nesnenin yöntemini çağırmak için kullanılır. Bunun için, işlevde öncelikle hangi nesnenin yöntemi çağrılacaksa o nesne belirtilir. Daha sonra, belirli bir gecikme süresi veya tekrar sayısı ile birlikte ilgili yöntem belirtilir.
Aşağıdaki örnek, performSelector işlevinin kullanımını detaylı bir şekilde göstermektedir:
Örnek Kod: | - (void) startProcess {[self performSelector:@selector(processCompleted) withObject:nil afterDelay:1.0];} - (void) processCompleted {// process has been completed} |
---|---|
Açıklama: | Bu örnek kodda, startProcess adında bir metot tanımlanmıştır. Bu metot, performSelector işlevini kullanarak processCompleted isimli başka bir metodu çağırmaktadır. Metod çağrısı, 1 saniye gecikme süresi ile gerçekleştirilecektir. |
Bu örnekte, performSelector işlevi kullanarak başka bir metodu nasıl çağırabileceğiniz gösterilmiştir. Bu işlev, Objective-C'de en sık kullanılan ve çok faydalı olan metotlardan biridir.
PerformSelectorInBackground Kullanımı
PerformSelectorInBackground, Objective-C dilinde bir nesnenin fonksiyonlarını farklı bir arka plan işlemi olarak yürütmek için kullanılan bir işlevdir. Bu işlem, uygulamayı daha hızlı hale getirmek ve performansını artırmak için kullanılır. PerformSelectorInBackground işlevi, bir nesnenin daha ciddi bir görevi yerine getirirken kullanıcıya uygulamayı kullanmaya devam etme imkanı sunar.
Bu işlev, büyük miktarda veri işleme gerektiren uygulamalarda oldukça faydalıdır. Örneğin, bir uygulama kullanıcının müzik dosyalarının listesini çıkarmak ve bu dosyaların meta verilerini çekmek istediği bir durumda PerformSelectorInBackground kullanılabilir. Bu durumda, işlem arka planda çalışır ve kullanıcı arayüzüne erişim engellenmez.
PerformSelectorInBackground işlevinin kullanımı oldukça kolaydır. Sadece önceden oluşturulmuş bir nesnenin fonksiyonuna erişilir ve PerformSelectorInBackground işlevi bu fonksiyonu işlemek üzere farklı bir arka plan işlemine atanır. Bu yöntem, büyük proje yerine küçük bir parçanın işlenmesi gereken durumlarda da kullanılabilir. İşlevin yapısı, uygulayıcılara geniş ölçüde esneklik sağlar ve çağrıldığında farklı türlerde işlemler yapılabilir.
PerformSelectorOnMainThread Kullanımı
Objective-C'de PerformSelectorOnMainThread işlevi, bir nesnenin işlevlerini ana işlemde nasıl yürüteceğini belirler. Bu işlem, UIKit'i güncellemek gibi ana işlemle ilgili olan görevlerde kullanışlıdır.
Bir nesnenin işlevlerini ana işlemde yürütmek için öncelikle bekan bir nesne ve o nesne için bir yöntem oluşturulur. Daha sonra performSelectorOnMainThread metodu çağrılır. Bu metod, ana işlemde nesnelerin yöntemlerine nasıl erişeceği ve bu yöntemlerin nasıl kullanılacağı belirler.
Aşağıdaki örnek kodda, bir nesne oluşturulur ve başka bir yöntem çağrısı yapılır:
Kod | Açıklama |
---|---|
[self performSelectorOnMainThread:@selector(runMethod) withObject:nil waitUntilDone:NO]; | Bir nesnenin runMethod yönteminin ana işlemde çağrılması |
Yukarıdaki örnekte, performSelectorOnMainThread yöntemi kullanılarak bir nesnenin runMethod yöntemi ana işlemde çağrılır. Yönteme, nil nesnesi verildiği için herhangi bir nesne beklenmez.