2. Objective C
Objective C, C’nin üzerine yazılmıs nesneye yönelik bir programlama dilidir. En yaygın kullanıldıgı alan
Cocoa çatısının kullanıldıgı yazılımlardır. Objective C, GCC ile derlenebilir. Objective C, 1980’li yıllarda
Brad Cox tarafından Stepstone adlı sirkette gelistirilmistir.
!
!
Cocoa Framework, nesneye yönelik program gelistirmeyi saglayan bir yapıdır.
!
!
GCC, çok çesitli programlama dillerini destekleyen bir derleyici sistemidir.
3. Objective C
Objective C, C diline yapılan cesitli eklentilerden olusmustur. C dilinden miras alınmayıp yeni eklenmis
bütün ön islemci direktifleri @ isareti ile baslar.
@interface ClassName : NSObject
@end
@implementation ClassName
@end
4. Objective C
Objective C dilinde sınıflar .h ve .m dosyaları olmak üzere iki dosyadan olusur.
.h dosyasında kodun tasarımını yaparız yani arayüz (interface) kısmını hazırlarız.
@interface ClassName : NSObject
/* Codes */
@end
.m dosyasında ise interface kısmında tanımladıgımız yapıları kullanarak kodumuzu yazıyoruz.
@implementation ClassName
/* Codes */
@end
5. Objective C
NSLog(@"Hello World");
Her dile baslarken oldugu gibi Objective C’ de de Hello World yazmayı ihmal etmedim tabiki :)
Degisken Tanımlamaları
NSString *name = @“Anıl”;
NSDate *today = [NSDate date];
BOOL *status = YES;
int *number = 4;
6. Objective C
Public - Private
.h dosyasında tanımladıgımız metotlarımız ve degiskenlerimiz public olarak görev görmektedir fakat
metotlarımızı ve degiskenlerimizi .m dosyasında tanımladıgımız takdirde private olarak çalısacaktır.
Property
Property, nesnelerin üye degiskenine erisimin nokta notasyonu (dot notation) ile olmasını saglar.
@property NSString *name;
Property olarak kullanılan nesnelere .m dosyasında ulasmak icin @synthesize etmek gerekir veya
degisken adının basına _ eklenerek kullanımı gerekmektedir.
@synthesize name;
_name;
7. Objective C
readwrite
Hem getter (okuma) hem de setter (yazma) tanımı icin kullanılır ve @synthesize kullanımı gerektirir.
readonly
Sadece getter tanımı icin kullanır.
assign
Hafıza yönetimiyle ilgili parametredir. Direk atama yapmayı saglar.
retain
Hafıza yönetimiyle ilgili parametredir. Direk atama yapmayı ve atanan nesnenin izinsiz silinmesini
engeller.
8. Objective C
copy
Hafıza yönetimiyle ilgili parametredir. Direk atma yapmayı, atanan nesnenin izinsiz silinmesini ve
degistirilmesini engeller.
atomic
Bu property thread - safe’tir. Multi thread uygulamalar icin uydundur. Aksi söylenmedikce bütün
property degiskenleri atomic olarak kabul edilir.
nonatomic
Multi thread bir uygulama kullanmayacagımız zamanlarda nonatomic olarak tanımlama yapabiliriz,
atomic olanlara göre daha hızlı calısmaktadır.
9. Objective C
synthesize
Property olarak tanımlanmıs bir degisken icin getter ve setter tanımlamalarına izin verir.
dynamic
Kendi getter ve setter metotlarımızı tanımlamamızı saglar.
13. Objective C
int *number = 4;
NSInteger *number = 4;
Primitive veri tiplerini tercih edebilecegimiz gibi bir de NSValue sınıfından türeyen NSInteger gibi
veri tiplerini de tercih edebiliriz. Özellikle performans gerektiren kısımlarda (döngüler vb.)
primitive tipler çok daha hızlı sonuc verir.
14. Objective C
nil
NSInteger *number = nil;
Herhangi bir nesneyi isaret etmeyen bos bir referans degiken tanımlamakta kullanılır.
NSString *name = nil;
15. Objective C
Selector
Tanımlı metotları temsil edebilen özel bir veri tipidir. Metot isimlerini ve aldıkları parametreleri tutar.
Performans artısını saglamak amacıyla tasarlanmıstır.
SEL *selector = @selector(methodName:);
/* Metot adının sonuna aldıgı parametre sayısı kadar : isareti eklenir. */
SEL *selector = @selector(methodName);
16. Objective C
Class Instance
ClassName *name = [ClassName alloc]init];
ClassName *name = [ClassName new];
* karakterinin kullanılma sebebi, Objective C’ de nesneler pointer referansları aracılıgılya islem yapar.
init metodu dolaylı yolda constructor islevi görmektedir.
[super init];
Sınıfımız baska bir sınıftan türediyse üst sınıfın üye degiskenlerinin ilk kullanıma hazırlanmasını saglar.
#import “ClassName.h” ile sınıfı kendi sınıfımıza dahil etmemiz saglanır.
17. Objective C
Methods
- (returnType) methodName;
- karakteri derleyeciye kendisinden sonra gelen metodun bir instance (nesne) metodu oldugunu söyler.
+ (returnType) methodName;
+ karakteri derleyeciye kendisinden sonra gelen metodun sınıfa ait bir metod oldugunu söyler.
- (returnType) methodName: (NSString *word);
Tek parametreli metot tanımlaması.
- (returnType) methodName: (NSString *word): (NSInteger *number);
Çok parametreli metot tanımlaması.
18. Objective C
Methods
ClassName *className = [ClassName alloc]init];
[className methodName];
Sınıfa ait olmayan bir metot tetiklenmesi.
[ClassName methodName];
Sınıfa ait olan bir metot tetiklenmesi.
alloc metodu, hafızadan yer ayrılmasını ve ayrılan hafıza alanının baslangıc adresini ilgili referans
degiskene atar.
init metodu, nesneye ilk deger ataması yapılmasını saglar. init metodunu override ederek kendi init
metodumuzu yazabiliriz. Bunu yaparken ilk basta [super init]; cagrısıyla üst sınıfın init metodunu
cagırmalıyız.
19. Objective C
Methods
- (id)init{
self = [super init];
if(self){
/* Codes */
}
return self;
}
self anahtar kelimesi aynı sınıf icerisindeki
metotların tetiklenmesini saglamak icin
kullanılmaktadır.
20. Objective C
Methods
- (id)dealloc{
[variable release];
[secondVariable release];
[super dealloc];
}
Calısma zamanında bir nesne ile kimsenin isi kalmadıgında otomatik olarak o nesne icin dealloc metodu
devreye girer. Bu metot sınıftaki tüm üye degiskenleri serbest bırakarak hafızada kapladıkları alanın geri
iade edilmesini saglar.
21. Objective C
Static Typing
ClassName *name = [ClassName alloc]init];
Dynamic Typing
id *object = [ClassName alloc]init];
id veri tipi, tüm Objective C sınıflarını temsil edebilen bir veri tipidir.
22. Objective C
NSObject Class Methods
- (BOOL) isKindOfClass: classObj;
Kendisine parametre olarak gelen sınıfın metodun bulundugu sınıfla aynı sınıf veya o sınıfın alt sınıfı olup
olmadıgını kontrol eder.
- (BOOL) isMemberOfClass: classObj;
Kendisine parametre olarak gelen sınıfın metodun bulundugu sınıfla aynı olup olmadıgını kontrol eder.
- (BOOL) respondsToSelector: selector;
Bir nesnenin belirli bir metoda cevap verip vermeyecegini kontrol eder. O nesnenin bulundugu sınıfla
birlikte alt sınıflarına da bakılır. Bu bir nesne metodudur dolayısıyla elimizde nesne olması gerekmektedir.
23. Objective C
NSObject Class Methods
+ (BOOL) instancesRespondToSelector: selector;
Sınıfın nesnelerinin kendisine parametre olarak gelen metoda karsılık verip vermeyecegini kontrol eder.
- (id) performSelector: selector;
Bir nesnenin belirli metodunu dolaylı yolda cagırmak icin kullanılır.
24. Objective C
Blocks
Bloklar metotlara benzer fakat çok önemli bir farkı bulunmaktadır; bloklar cagırıldıkları yerdeki diger
degiskenlere, bu degiskenler bloga parametre olarak gönderilmese bile direkt olarak erisim imkanı saglar.
^ returnType (parameters){
/* Codes */
}
Eger yerel bir degisken üzerindeki degisikliklerin bloklar tarafından algılanmasını istiyorsak bu degisken
tipinin onune __block ifadesini getirmeliyiz.
__block int number = 8;
25. Objective C
Arrays
C’ den miras alınan dizi yapısı Objective C’ de de kullanılabilir.
NSString *myArray[5];
myArray[4] = @“İstanbul”;
Objective C’ de kullanılan dizi sınıfı ise NSArray sınıfıdır. C dizilerinden farklı olarak boyut kontrolü yapar
ve dizinin eleman sayısından yüksek bir indeksteki veriye erisimi engeller. NSArray sınıfının bir baska
özelligi de dizi elemanlarının farklı sınıfıların nesneleri olabilmesidir. Dizi elemanlarından birinin tipi
NSString, bir digerininki NSDate olabilir.
/* Dizi olusturmayı saglar. */
NSArray *myArray = [NSArray array];
NSArray *myArray = [NSArray alloc]initWithObjects: @“İstanbul”, @“Ankara”, @“Sivas”, nil];
26. Objective C
Arrays
NSArray *myArray = [NSArray alloc]arrayWithObjects: @“İstanbul”, @“Ankara”, @“Sivas”, nil];
/* Parametre olarak verilen indisteki dizi elemanına ulasmayı saglar. */
NSString *city = [myArray objectAtIndex:0];
/* Dizinin eleman sayısını döndürür. */
int arrayCount = [myArray count];
27. Objective C
Mutable - Immutable
NSString, NSArray gibi isminde Mutable geçmeyen Foundation Framework sınıflarından olusan
degistirilemez (immutable) nesneler olarak bilinirler. Bu nesneler olusturulduktan sonra degerleri
üzerinde oynama yapılmasına izin verilmez. Bu nedenle yeni bir eleman eklemek istedigimizde nesne
üzerinde degisiklik yapılmasına izin verilmedigi icin yeni bir nesne olusturulur ve eski nesne silinir.
NSMutableArray gibi isminde Mutable geçenler ise nesne üzerinde oynama yapılmasına izin verirler.
28. Objective C
NSMutableArray
Eleman ekleme ve çıkarma islemleri yapmak istedigimiz diziler için NSMutableArray tercih ediyoruz.
NSMutableArray *myArray = [NSMutableArray alloc]arrayWithObjects: @“Cumhuriyet
Üniversitesi”, @“Bogazici Üniversitesi”, @“İstanbul Teknik Üniversitesi”, @“ODTÜ”,nil];
/* Eleman ekleme */
[myArray addObject: @“İstanbul Üniversitesi”];
/* Eleman çıkarma */
[myArray removeObject: @“İstanbul Üniversitesi”];
[myArray removeObjectAtIndex:1];
29. Objective C
NSDictionary - NSMutableDictionary
NSDictionary benzeri yapılar diger programlama dillerinde Dictionary veya Map olarak geçer.
NSDictionary’deki her bir eleman anahtar (key) - deger (value) olarak tutulmaktadır. Her bir anahtara
karsılık gelen bir deger bulunur. Elemanların anahtar degerleri birbirinden farklı olmak zorundadır fakat
farklı anahtarlara aynı degerler karsılık gelebilir.
NSMutableDictionary *telephoneCodes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@“İstanbul Anadolu”, @“216”, @“İstanbul Avrupa”, @“212”, @“Sivas”, @“346”,nil];
/* Elemana Ulasma */
NSLog(@“İstanbul Anadolu: %@”, [telephoneCodes objectForKey: @“216”]);
/* Eleman Ekleme*/
[telephoneCodes setObject: @“Ankara” forKey: @“312”];
/* Eleman Çıkarma*/
[telephoneCodes removeObjectForKey: @“312”];
/* Eleman Degerini Güncelleme*/
[telephoneCodes setValue: @“…” forKey: @“212”];
30. Objective C
NSSet
NSSet sayesinde matematiksel kümeler tanımlayabiliriz. Elemanların birbirini tekrar etmesine izin
verilmez.
/* cluster degiskeninin icerigi {A,E,B,Z,Y} olur. */
NSSet *cluster = [NSSet setWithObjects: @“A”, @“E”, @“B”, @“Z”, @“B”, @“A”, @“Y”, nil];
/* Kümede elemanın olup olmadıgını kontrol eder. */
BOOL result = [cluster containsObject: @“A”];
/* İki kümenin kesisim kontrolü */
BOOL result = [cluster intersectsSet: secondCluster];
/* İki kümenin denklik kontrolü */
if(cluster isEqualToSet: secondCluster == YES){
NSLog(@“İki küme birbirine denktir.”);
}
31. Objective C
NSMutableSet
/* Eleman Ekleme */
[cluster addObject: @“C”];
/* Eleman Çıkarma */
[cluster removeObject: @“C”];
/* İki kümenin bilesimini bulur ve cluster’a yazar. */
[cluster unionSet: secondCluster];
/* İki kümenin kesisimini bulur ve cluster’a yazar. */
[cluster intersectSet: secondCluster];
/* İki kümenin farkını bulur ve cluster’a yazar. */
[cluster minusSet: secondCluster];
32. Objective C
NSCountedSet
İsminde Mutable ifadesi geçmemesine ragmen Mutable yapıdadır. NSSet sınıfına benzerlik gösterir, tek
farkı kümeye bir eleman eklendiginde o eleman için tutulan sayaç degerini artırır ve elemanların tekrar
etmesine izin vermez.
NSCountedSet *countSet = [NSCountedSet setWithObjects: @“A”, nil];
/* Herhangi bir eleman için tutulan sayaç degerine ulaşma */
unsigned long aCount = [countSet countForObject: @“A”];
33. Objective C
NSData - NSMutableData
NSData sınıfı herhangi bir nesnenin, dosyanın, videonun verisini tutacak sekilde tasarlanmıstır.
Herhangi bir nesnenin degerini byte cinsinden NSData veya NSMutableData nesnelerine
kopyalayabiliriz. NSData ile NSMutableData’nın tek farkı birincisi statik, ikincisi dinamik yapıda
olmasıdır. NSData dosya, resim ve video islemlerinde ilgili dosyanın verisini tutmak için sıklıkla
kullanılır.
char *characters = “Hello World”;
NSData *data = [NSData dataWithBytes: characters length: strlen(characters)];
34. Objective C
NSString - NSMutableString
NSMutableString, NSString sınıfının degistirilebilir versiyonudur.
/* Var olan bir karakter dizisinden yeni bir karakter dizisi olusturur. */
NSString *newWord = [NSString stringWithString: word];
/* Karakter dizisini kendisine verilen formata ve parametrelere göre olusturma */
NSString *cityCount = [NSString stringWithFormat: @“Türkiye’de %d il vardır.”, 81];
/* Karakter dizisinin uzunlugunu bulma */
int charLength = [cityCount length];
35. Objective C
NSNumber
int veya float gibi primitive sayısal degerleri NSArray veya NSDictionary gibi bir koleksiyonda
depolayabilmek için, o sayısal degeri ilk önce NSNumber sınıfının bir nesnesine çevirmemiz
gerekmektedir.
/* NSNumber nesnesine dönüstürme */
int number = 1907;
float secondNumber = 19.07;
NSNumber *intNumber = [NSNumber numberWithInt: number];
NSNumber *floatNumber = [NSNumber numberWithFloat: secondNumber];
/* Primitive tipe dönüstürme */
int number = [intNumber intValue];
float secondNumber = [floatNumber floatValue];
36. Objective C
NSDate
/* Şu anki tarih */
NSDate *now = [NSDate date];
/* Bes saniye sonraki tarih */
sleep(5);
NSDate *fiveSecondsLater = [NSDate date];
/* Erken tarihi bulma */
NSDate *early = [now earlierDate: fiveSecondsLater];
/* Geç tarihi bulma */
NSDate *late = [now laterDate: fiveSecondsLater];
38. iOS
Apple, IDE (Integrated Development Environment) olarak sadece Mac OS X isletim sisteminde calısan
Xcode yazılım gelistirme platformunu tercih etmektedir. Xcode; iPhone, iPad ve Apple bilgisayarlarda
calısmak üzere Mac OS X uyumlu programlar gelistirmemizi saglar.
39. iOS
Create a new Xcode project seçeneği ile yeni bir Xcode projesi olusturuyoruz.
43. iOS
Delegate Methods
Delegate metotlar, kullandıgımız sınıfların .h dosyalarına dahil edilir. Delegate metotlar içerisinde
protokolleri bulundurur. Protokoller diger programlama dillerindeki interface kavramına karsılık
gelmektedir. Protokoller sayesinde sınıfımıza kurallar koyarak daha düzenli bir isleyis saglayabiliriz.
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@end
@protocol UIApplicationDelegate<NSObject>
@required
/* Methods */
@optional
/* Methods */
@end
44. iOS
AppDelegate (Application Delegate), uygulamamızı temsil eden sınıftır.
- (BOOL) application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary
*)launchOptions
Uygulama çalıstıktan sonra gerekli ayarlamalar yapıldıgında bu delegate metodu çalısmaktadır.
- (void) applicationWillResignActive: (UIApplication *)application
Uygulama aktif durumdan inaktif duruma gectiginde bu delegate metodu calısmaktadır.
- (void) applicationDidEnterBackground: (UIApplication *)application
Uygulama arka plana düstügünde bu delegate metodu calısmaktadır.
45. iOS
- (void) applicationWillEnterForeground: (UIApplication *)application
Uygulama arka planda inaktif durumdayken cagırılır ve yeniden aktif duruma gelmesi istenir ise bu
delegate metodu çalısmaktadır.
- (void) applicationDidBecomeActive: (UIApplication *)application
Uygulama aktif duruma geldiginde bu delegate metodu çalısmaktadır.
- (void) applicationWillTerminate: (UIApplication *)application
Uygulama sonlandırılmak istenir ise bu delegate metodu çalısmaktadır.
53. iOS
UITableView
UITableView komponentimizin DataSource ve Delegate özelliklerini ViewController sınıfımıza baglıyoruz,
bunu yapmadıgımız takdirde verilerimiz UITableView komponentimizde listelenmeyecektir.
Son olarak her bir satır için prototip
olusturuyoru ve bu prototipe bir tanımlayıcı
veriyoruz.
57. iOS
Segue
Segue dedigimiz gecis yapıları sayesinde ViewController’lar arasında gecis yapabiliriz, bunu yaparken
animasyon ekleyebilir ve bulundugumuz ViewController’dan gecis yapacagımızı ViewController’a data
aktarımı yapabiliriz.
Storyboard üzerinden bulundugumuz ViewController’a kntrl tusu ile basılı
tutup, gecis yapılmasını istedigimiz ViewController’a bırakıp Segue islemini
gerceklestirebiliriz. Bunun sonucunda karsımıza gelen 3 secenekten bize
uygun olanı tercih ederiz.
58. iOS
Changing ViewController Programmatically
Storyboard üzerinden ikinci ViewController’ı ekliyoruz ve ayırıcı
olması icin Storyboard ID’sini belirliyoruz.
/* ViewController.h */
#import “SecondViewController.h”
@interface ViewController : UIViewController
- (IBAction)changeController: (id)sender;
@end
67. iOS
UILocalNotification
/* ViewController.m */
- (void)viewDidLoad{
[super viewDidLoad];
UILocalNotification *notification = [UILocalNotification alloc]init];
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.alertBody = @“Anıl SÖZERİ”;
notification.soundName = UILocalNotificationDefaultSoundName;
[UIApplication sharedApplication] presentLocalNotificationNow: notification];
}
UILocalNotification ile kullanıcıya bilgi verme amaçlı olarak mesaj
gönderebiliriz.
68. XML
XML Nedir?
eXtensible Markup Language, hem insanlar hem de bilgi islem sistemleri tarafından kolayca okunabilecek
dokümanlar olusturmaya yarayan W3C (WWW, World Wide Web Consortium) tarafından tanımlanmıs bir
standarttır.
!
Bu özelligi ile veri saklamanın yanında farklı sistemler arasında veri alısverisi yapmayı saglayan bir ara
format görevi de görür.
!
XML, HTML’ in de tasarımcısı olan Tim Berners Lee’ dir. Dilin düzenlenmesi W3C’ nin sorumlulugundadır.
69. iOS
NSXMLParser
NSXMLParser sınıfı XML datamızı <tagname> XML taglarına göre parcalara ayırıp bizim ihtiyacımız olan
datayı kullanmamızı saglar.
/* ViewController.h */
@interface ViewController : UIViewController <NSXMLParserDelegate>
@property NSXMLParser *parser;
@end
/* ViewController.m */
@implementation ViewController
/* Parse islemi basladıgında bu metot calısır. */
- (void)parserDidStartDocument: (NSXMLParser *)parser;
@end
72. Base64
Base64 Nedir?
Base64, Binary data (ikili veri)’ ların sadece ASCII karakterlerini kullanan ortamlara iletilmesini ve
saklanmasını saglayan bir kodlama semasıdır.
!
Base64 kodlamasının uzunlugu daimi olarak 4’ ün katları seklindedir. 4’ ün katı olmayan hiçbir veri geçerli
bir Base64 verisi degildir. 4’ ün katı degilse gerektigi kadar = isareti sonuna eklenir. Kodlanmıs veri
orjinal haline göre %33 oranında büyür.
!
ASCII, Latin alfabesi üzerine kurulu 7 bitlik bir karakter setidir.
75. JSON
JSON Nedir?
JSON (JavaScript Object Notation), insanlar tarafından okunabilen bir veri degisim biçimidir. XML’ in
JavaScript ile çokta iyi kullanılmamasından ötürü tercih edilir. Klasik DOM agaçlarından farksız bir yapıya
sahiptir.
!
DOM (Document Object Model), İnternet tarayıcıları girilen internet sayfasındaki tüm elemanları nesne
olarak kabul eder. DOM sayfa içerisindeki herhangi bir nesneye müdahale edebilmemize olanak verir. Bunu
yapabilmek için JavaScript gibi bazı script dilleri kullanmak gerekmektedir.
79. XMPP
XMPP Nedir?
eXtensible Messaging and Presence Protocol, İnternetteki iki ucun herhangi bir yapısal bilgiyi karsılıklı ve
neredeyse es zamanlı olarak aktarmalarına olanak saglayan açık bir XML protokolü ve teknolojisidir.
!
Avantajları;
!
- XMPP protokolleri açık ve özgürdür.
- Standarttır.
- Kendini ispatlamıstır ve birçok gelistiricisi bulunmaktadır.
- Merkezi degildir, herhangi bir sunucu isletebilir.
- Güvenlidir.
- Genisletilebilirdir, XML’ den faydalanarak kendi fonksiyonlarımızı ekleyebiliriz.
- Esnektir, mesajlasmanın ötesinde ag yönetmek, dosya paylasımı, oyun oynamak icin kullanılabilir.
80. iOS
XMPPFramework
XMPPFramework, XMPP yapısının Mac OS X ve iOS platformundaki kütüphanesidir. Bu kütüphane
Robbie Hanson tarafından gelistirilmistir ve hala da gelistirilmektedir.
!
https://github.com/robbiehanson/XMPPFramework
81. iOS
XMPPStream
XMPPStream sınıfı, XMPPFramework’ün en temel yapısı, eklentiler ve özel yapıdaki kodları içerir. Aynı
zamanda XMPPParser sınıfını da kendi içerisinde barındırır.
!
XMPPJID sınıfı, degismez id saglayıcıdır.
!
XMPPStream sınıfından xmppStream adında bir adet instance olusturdugumuzu varsayalım;
!
/* Baglanılacak olan Server’ın host name yani adresini belirliyoruz. */
xmppStream.hostName = @“127.0.0.1”;
!
/* Baglanılacak olan Server’ın host port numarasını belirliyoruz. XMPP default degeri 5222’dir. */
xmppStream.hostPort = 5222;
!
/* XMPP Socket yapısının arkaplanda çalısmasını saglamak için aktif hale getiriyoruz. */
xmppStream.enableBackgroundingOnSocket = YES;
86. iOS
XMPPPresence
XMPPPresence sınıfı, kullanıcıların Server üzerinde çevrimiçi, mesgul, dısarıda vb. olma durumlarını
yöneten XMPPFramework sınıfıdır.
!
/* XML Olusturma, Server’ a baglandıgımızda çevrimiçi oldugumuzu bildiren XML örnegi. */
XMPPPresence *presence = [XMPPPresence presence];
NSXMLElement *status = [NSXMLElement elementWithName:@“status”];
[status setStringValue:@“Çevrimiçi”];
[presence addChild: status];
/* XMPPStream sınıfının sendElement metodu sayesinde paketlerin Server’ a gönderimi saglanır.*/
[xmppStream sendElement:presence];
!
/* Ekran Çıktısı */
<presence>
<status>Çevrimiçi</status>
</presence>
87. iOS
XMPPIQ
XMPPIQ sınıfı, Info/Query yani Server’ dan bilgi almamızı saglayan XMPPFramework sınıfıdır.
!
IQ paketlerinin altında gelen Ping paketleri bulunmaktadır. Bu paket Server’ dan bize gönderilerek
“Burada mısın?” tarzında bir mesaj verdigini düsünebiliriz. Biz de “Buradayım.” mesajı vermek için Ping
paketine cevap olarak bizimde Server’ a Ping paketi yollamamız gerekmektedir.
!
Ayrıca yine IQ paketlerinin altında gelen Roster paketleri de bulunmaktadır. Bu paket ise Server’ da kayıtlı
olan kullanıcıların bilgilerinin bize gelmesini saglamaktadır. Örnegin; kisi listesinde görüntüleyecegimiz
kisiler bu paketin icerisinde gelmektedir.
!
Bunların dısında bir de Custom IQ dedigimiz yapılar vardır. Custom IQ paketleri ise daha önce
bahsettigimiz gibi XMPP yapısı genisletilebilir bir yapı oldugundan dolayı kendi düzenlemelerimizi
yapmamıza olanak verir. Bizim kendi ekledigimiz XML yapıları sayesinde server ile Custom IQ paketi
alısverisini gerçeklestirebiliriz.
88. iOS
XMPPMessage
XMPPMessage sınıfı, mesajlasma islemlerini yöneten XMPPFramework sınıfıdır.
!
Message paketi haricinde ayrıca Composing paketi dedigimiz kullanıcıya “Yazıyor..” bilgisini veren pakette
Message paketinin altında bulunmaktadır.
!
/* Mesajın içeriginde ne oldugunu gösterir. */
[message body];
!
/* Mesajın kimden geldigini gösterir. */
[message from];
!
/* Mesajın kime gidecegini gösterir. */
[message to];