O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
iOS Programming
Objective C
Objective C, C’nin üzerine yazılmıs nesneye yönelik bir programlama dilidir. En yaygın kullanıldıgı alan
Cocoa...
Objective C
Objective C, C diline yapılan cesitli eklentilerden olusmustur. C dilinden miras alınmayıp yeni eklenmis
bütün...
Objective C
Objective C dilinde sınıflar .h ve .m dosyaları olmak üzere iki dosyadan olusur.
.h dosyasında kodun tasarımın...
Objective C
NSLog(@"Hello World");
Her dile baslarken oldugu gibi Objective C’ de de Hello World yazmayı ihmal etmedim tab...
Objective C
Public - Private
.h dosyasında tanımladıgımız metotlarımız ve degiskenlerimiz public olarak görev görmektedir ...
Objective C
readwrite
Hem getter (okuma) hem de setter (yazma) tanımı icin kullanılır ve @synthesize kullanımı gerektirir....
Objective C
copy
Hafıza yönetimiyle ilgili parametredir. Direk atma yapmayı, atanan nesnenin izinsiz silinmesini ve
degist...
Objective C
synthesize
Property olarak tanımlanmıs bir degisken icin getter ve setter tanımlamalarına izin verir.
dynamic
...
Objective C
for
for(int i = 0; i < 10; i++){
/* Codes */
}
while
while(condition){
/* Codes */
}
Objective C
do - while
do{
/* Codes */
}while(condition);
if - else if - else
if(condition){
/* Codes */
} else if(express...
Objective C
Try - Catch - Finally
@try{
/* Codes */
}
@catch(NSException *exception){
/* Codes * /
}
@finally{
/* Codes */...
Objective C
int *number = 4;
NSInteger *number = 4;
Primitive veri tiplerini tercih edebilecegimiz gibi bir de NSValue sın...
Objective C
nil
NSInteger *number = nil;
Herhangi bir nesneyi isaret etmeyen bos bir referans degiken tanımlamakta kullanı...
Objective C
Selector
Tanımlı metotları temsil edebilen özel bir veri tipidir. Metot isimlerini ve aldıkları parametreleri ...
Objective C
Class Instance
ClassName *name = [ClassName alloc]init];
ClassName *name = [ClassName new];
* karakterinin kul...
Objective C
Methods
- (returnType) methodName;
- karakteri derleyeciye kendisinden sonra gelen metodun bir instance (nesne...
Objective C
Methods
ClassName *className = [ClassName alloc]init];
[className methodName];
Sınıfa ait olmayan bir metot te...
Objective C
Methods
- (id)init{
self = [super init];
if(self){
/* Codes */
}
return self;
}
self anahtar kelimesi aynı sın...
Objective C
Methods
- (id)dealloc{
[variable release];
[secondVariable release];
[super dealloc];
}
Calısma zamanında bir ...
Objective C
Static Typing
ClassName *name = [ClassName alloc]init];
Dynamic Typing
id *object = [ClassName alloc]init];
id...
Objective C
NSObject Class Methods
- (BOOL) isKindOfClass: classObj;
Kendisine parametre olarak gelen sınıfın metodun bulu...
Objective C
NSObject Class Methods
+ (BOOL) instancesRespondToSelector: selector;
Sınıfın nesnelerinin kendisine parametre...
Objective C
Blocks
Bloklar metotlara benzer fakat çok önemli bir farkı bulunmaktadır; bloklar cagırıldıkları yerdeki diger...
Objective C
Arrays
C’ den miras alınan dizi yapısı Objective C’ de de kullanılabilir.
NSString *myArray[5];
myArray[4] = @...
Objective C
Arrays
NSArray *myArray = [NSArray alloc]arrayWithObjects: @“İstanbul”, @“Ankara”, @“Sivas”, nil];
/* Parametr...
Objective C
Mutable - Immutable
NSString, NSArray gibi isminde Mutable geçmeyen Foundation Framework sınıflarından olusan
...
Objective C
NSMutableArray
Eleman ekleme ve çıkarma islemleri yapmak istedigimiz diziler için NSMutableArray tercih ediyor...
Objective C
NSDictionary - NSMutableDictionary
NSDictionary benzeri yapılar diger programlama dillerinde Dictionary veya M...
Objective C
NSSet
NSSet sayesinde matematiksel kümeler tanımlayabiliriz. Elemanların birbirini tekrar etmesine izin
verilm...
Objective C
NSMutableSet
/* Eleman Ekleme */
[cluster addObject: @“C”];
/* Eleman Çıkarma */
[cluster removeObject: @“C”];...
Objective C
NSCountedSet
İsminde Mutable ifadesi geçmemesine ragmen Mutable yapıdadır. NSSet sınıfına benzerlik gösterir, ...
Objective C
NSData - NSMutableData
NSData sınıfı herhangi bir nesnenin, dosyanın, videonun verisini tutacak sekilde tasarl...
Objective C
NSString - NSMutableString
NSMutableString, NSString sınıfının degistirilebilir versiyonudur.
/* Var olan bir ...
Objective C
NSNumber
int veya float gibi primitive sayısal degerleri NSArray veya NSDictionary gibi bir koleksiyonda
depol...
Objective C
NSDate
/* Şu anki tarih */
NSDate *now = [NSDate date];
/* Bes saniye sonraki tarih */
sleep(5);
NSDate *fiveS...
iOS
iOS
Apple, IDE (Integrated Development Environment) olarak sadece Mac OS X isletim sisteminde calısan
Xcode yazılım gelist...
iOS
Create a new Xcode project seçeneği ile yeni bir Xcode projesi olusturuyoruz.
iOS
Single View Application seçeneği ile olusturacagımız projenin tipini belirliyoruz.
iOS
iOS
Projeyi olusturdugumuz da olusan dosyaların genel görünümü
iOS
Delegate Methods
Delegate metotlar, kullandıgımız sınıfların .h dosyalarına dahil edilir. Delegate metotlar içerisinde...
iOS
AppDelegate (Application Delegate), uygulamamızı temsil eden sınıftır.
- (BOOL) application: (UIApplication *)applicat...
iOS
- (void) applicationWillEnterForeground: (UIApplication *)application
Uygulama arka planda inaktif durumdayken cagırıl...
iOS
Storyboard, bizim uygulamamızın tasarımını gelistirdigimiz ve yönettigimiz kısımdır.
iOS
Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
iOS
Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
iOS
Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
iOS
ViewController, uygulamamıza ekledigimiz ViewController’ların yönetilmesini saglayan sınıflardır.
- (void) viewDidLoad...
iOS
IBAction - IBOutlet
/* ViewController.h */
@property (weak, nonatomic) IBOutlet UILabel *myLabel;
- (IBAction)print: (...
iOS
UITableView
iOS
UITableView
UITableView komponentimizin DataSource ve Delegate özelliklerini ViewController sınıfımıza baglıyoruz,
bun...
iOS
UITableView
/* ViewController.h */
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDel...
iOS
UITableView
/* ViewController.m */
@synthesize myArray;
- (NSInteger *)tableView: (UITableView *)tableView: numberOfRo...
iOS
UITableView
iOS
Segue
Segue dedigimiz gecis yapıları sayesinde ViewController’lar arasında gecis yapabiliriz, bunu yaparken
animasyon ...
iOS
Changing ViewController Programmatically
Storyboard üzerinden ikinci ViewController’ı ekliyoruz ve ayırıcı
olması icin...
iOS
Changing ViewController Programmatically
/* ViewController.m */
@interface ViewController (){
SecondViewController *se...
iOS
UIAlertView
/* ViewController.m */
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
UIAlertVie...
iOS
UIWebView
/* InfoViewController.m */
@implementation ViewController
@synthesize myWebView;
- (void)viewDidLoad{
[super...
iOS
NSThread
/* ViewController.m */
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
sleep(5);
[NS...
iOS
NSUserDefaults
/* ViewController.h */
@interface ViewController : UIViewController
@property NSUserDefaults *userInfo;...
iOS
NSUserDefaults
/* NSUserDefaults obje ekleme */
[userInfo setInteger: 2 forKey: @“dataCount”];
[userInfo setObject: cl...
iOS
NSNotificationCenter
/* ViewController.m */
[[NSNotificationCenter defaultCenter] postNotificationName: @“notification...
iOS
NSNotificationCenter
/* AnotherViewController.m */
/* Notification’ı diger ViewController’ımızdan karsılıyoruz. */
[[N...
iOS
UILocalNotification
/* ViewController.m */
- (void)viewDidLoad{
[super viewDidLoad];
UILocalNotification *notification...
XML
XML Nedir?
eXtensible Markup Language, hem insanlar hem de bilgi islem sistemleri tarafından kolayca okunabilecek
dokü...
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...
iOS
NSXMLParser
/* ViewController.m */
@implementation ViewController
/* XML elementlerinin parse islemi basladıgında bu m...
iOS
Creating XML
/* XML Olusturma, Server’ a baglandıgımızda çevrimiçi oldugumuzu bildiren XML örnegi. */
XMPPPresence *pr...
Base64
Base64 Nedir?
Base64, Binary data (ikili veri)’ ların sadece ASCII karakterlerini kullanan ortamlara iletilmesini v...
iOS
Base64 Encode && Decode
/* ViewController.h */
@interface ViewController : UIViewController
- (NSString *)base64Encode...
iOS
Base64 Encode && Decode
/* ViewController.m */
@implementation ViewController
- (NSString *)base64Encode: (NSString *)...
JSON
JSON Nedir?
JSON (JavaScript Object Notation), insanlar tarafından okunabilen bir veri degisim biçimidir. XML’ in
Jav...
iOS
NSJSONSerialization
/* ViewController.h */
@interface ViewController : UIViewController
@property NSMutableDictionary ...
/* ViewController.m */
/* JSON Datası olusturmayı saglar. */
@implementation ViewController
- (void)createJSONData{
[JSOND...
/* ViewController.m */
/* Gelen JSON Datasına göre verileri çekmeyi saglar. */
@implementation ViewController
- (void)getJ...
XMPP
XMPP Nedir?
eXtensible Messaging and Presence Protocol, İnternetteki iki ucun herhangi bir yapısal bilgiyi karsılıklı...
iOS
XMPPFramework
XMPPFramework, XMPP yapısının Mac OS X ve iOS platformundaki kütüphanesidir. Bu kütüphane
Robbie Hanson ...
iOS
XMPPStream
XMPPStream sınıfı, XMPPFramework’ün en temel yapısı, eklentiler ve özel yapıdaki kodları içerir. Aynı
zaman...
iOS
XMPPStream
/* XMPPStream Sunucu Baglantısının Gerçeklestirilmesi */
NSError *error;
!
if(![xmppStream connectWithTimeo...
iOS
XMPPStream
/* XMPPStream Sunucu Baglantısının Gerçeklestirilmesinin Ardından Kimlik Dogrulaması İslemi */
NSError *err...
iOS
XMPPStream Delegate Methods
/* Mesaj geldiginde tetiklenen delegate metodu */
- (void)xmppStream:(XMPPStream *)sender ...
iOS
XMPPStream Delegate Methods
/* Baglantı saglandıgında tetiklenen delegate metodu */
- (void)xmppStreamDidConnect:(XMPP...
iOS
XMPPPresence
XMPPPresence sınıfı, kullanıcıların Server üzerinde çevrimiçi, mesgul, dısarıda vb. olma durumlarını
yöne...
iOS
XMPPIQ
XMPPIQ sınıfı, Info/Query yani Server’ dan bilgi almamızı saglayan XMPPFramework sınıfıdır.
!
IQ paketlerinin a...
iOS
XMPPMessage
XMPPMessage sınıfı, mesajlasma islemlerini yöneten XMPPFramework sınıfıdır.
!
Message paketi haricinde ayr...
Próximos SlideShares
Carregando em…5
×

de

Introduction to iOS Programming && About XMPPFramework Slide 1 Introduction to iOS Programming && About XMPPFramework Slide 2 Introduction to iOS Programming && About XMPPFramework Slide 3 Introduction to iOS Programming && About XMPPFramework Slide 4 Introduction to iOS Programming && About XMPPFramework Slide 5 Introduction to iOS Programming && About XMPPFramework Slide 6 Introduction to iOS Programming && About XMPPFramework Slide 7 Introduction to iOS Programming && About XMPPFramework Slide 8 Introduction to iOS Programming && About XMPPFramework Slide 9 Introduction to iOS Programming && About XMPPFramework Slide 10 Introduction to iOS Programming && About XMPPFramework Slide 11 Introduction to iOS Programming && About XMPPFramework Slide 12 Introduction to iOS Programming && About XMPPFramework Slide 13 Introduction to iOS Programming && About XMPPFramework Slide 14 Introduction to iOS Programming && About XMPPFramework Slide 15 Introduction to iOS Programming && About XMPPFramework Slide 16 Introduction to iOS Programming && About XMPPFramework Slide 17 Introduction to iOS Programming && About XMPPFramework Slide 18 Introduction to iOS Programming && About XMPPFramework Slide 19 Introduction to iOS Programming && About XMPPFramework Slide 20 Introduction to iOS Programming && About XMPPFramework Slide 21 Introduction to iOS Programming && About XMPPFramework Slide 22 Introduction to iOS Programming && About XMPPFramework Slide 23 Introduction to iOS Programming && About XMPPFramework Slide 24 Introduction to iOS Programming && About XMPPFramework Slide 25 Introduction to iOS Programming && About XMPPFramework Slide 26 Introduction to iOS Programming && About XMPPFramework Slide 27 Introduction to iOS Programming && About XMPPFramework Slide 28 Introduction to iOS Programming && About XMPPFramework Slide 29 Introduction to iOS Programming && About XMPPFramework Slide 30 Introduction to iOS Programming && About XMPPFramework Slide 31 Introduction to iOS Programming && About XMPPFramework Slide 32 Introduction to iOS Programming && About XMPPFramework Slide 33 Introduction to iOS Programming && About XMPPFramework Slide 34 Introduction to iOS Programming && About XMPPFramework Slide 35 Introduction to iOS Programming && About XMPPFramework Slide 36 Introduction to iOS Programming && About XMPPFramework Slide 37 Introduction to iOS Programming && About XMPPFramework Slide 38 Introduction to iOS Programming && About XMPPFramework Slide 39 Introduction to iOS Programming && About XMPPFramework Slide 40 Introduction to iOS Programming && About XMPPFramework Slide 41 Introduction to iOS Programming && About XMPPFramework Slide 42 Introduction to iOS Programming && About XMPPFramework Slide 43 Introduction to iOS Programming && About XMPPFramework Slide 44 Introduction to iOS Programming && About XMPPFramework Slide 45 Introduction to iOS Programming && About XMPPFramework Slide 46 Introduction to iOS Programming && About XMPPFramework Slide 47 Introduction to iOS Programming && About XMPPFramework Slide 48 Introduction to iOS Programming && About XMPPFramework Slide 49 Introduction to iOS Programming && About XMPPFramework Slide 50 Introduction to iOS Programming && About XMPPFramework Slide 51 Introduction to iOS Programming && About XMPPFramework Slide 52 Introduction to iOS Programming && About XMPPFramework Slide 53 Introduction to iOS Programming && About XMPPFramework Slide 54 Introduction to iOS Programming && About XMPPFramework Slide 55 Introduction to iOS Programming && About XMPPFramework Slide 56 Introduction to iOS Programming && About XMPPFramework Slide 57 Introduction to iOS Programming && About XMPPFramework Slide 58 Introduction to iOS Programming && About XMPPFramework Slide 59 Introduction to iOS Programming && About XMPPFramework Slide 60 Introduction to iOS Programming && About XMPPFramework Slide 61 Introduction to iOS Programming && About XMPPFramework Slide 62 Introduction to iOS Programming && About XMPPFramework Slide 63 Introduction to iOS Programming && About XMPPFramework Slide 64 Introduction to iOS Programming && About XMPPFramework Slide 65 Introduction to iOS Programming && About XMPPFramework Slide 66 Introduction to iOS Programming && About XMPPFramework Slide 67 Introduction to iOS Programming && About XMPPFramework Slide 68 Introduction to iOS Programming && About XMPPFramework Slide 69 Introduction to iOS Programming && About XMPPFramework Slide 70 Introduction to iOS Programming && About XMPPFramework Slide 71 Introduction to iOS Programming && About XMPPFramework Slide 72 Introduction to iOS Programming && About XMPPFramework Slide 73 Introduction to iOS Programming && About XMPPFramework Slide 74 Introduction to iOS Programming && About XMPPFramework Slide 75 Introduction to iOS Programming && About XMPPFramework Slide 76 Introduction to iOS Programming && About XMPPFramework Slide 77 Introduction to iOS Programming && About XMPPFramework Slide 78 Introduction to iOS Programming && About XMPPFramework Slide 79 Introduction to iOS Programming && About XMPPFramework Slide 80 Introduction to iOS Programming && About XMPPFramework Slide 81 Introduction to iOS Programming && About XMPPFramework Slide 82 Introduction to iOS Programming && About XMPPFramework Slide 83 Introduction to iOS Programming && About XMPPFramework Slide 84 Introduction to iOS Programming && About XMPPFramework Slide 85 Introduction to iOS Programming && About XMPPFramework Slide 86 Introduction to iOS Programming && About XMPPFramework Slide 87 Introduction to iOS Programming && About XMPPFramework Slide 88
Próximos SlideShares
Tecnologia de la informacion y las comunicacciones
Avançar

0 gostaram

Compartilhar

Introduction to iOS Programming && About XMPPFramework

Introduction to iOS Programming and About XMPPFramework

  • Seja a primeira pessoa a gostar disto

Introduction to iOS Programming && About XMPPFramework

  1. 1. iOS Programming
  2. 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. 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. 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. 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. 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. 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. 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. 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.
  10. 10. Objective C for for(int i = 0; i < 10; i++){ /* Codes */ } while while(condition){ /* Codes */ }
  11. 11. Objective C do - while do{ /* Codes */ }while(condition); if - else if - else if(condition){ /* Codes */ } else if(expression){ /* Codes * / } else{ /* Codes */ }
  12. 12. Objective C Try - Catch - Finally @try{ /* Codes */ } @catch(NSException *exception){ /* Codes * / } @finally{ /* Codes */ }
  13. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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];
  37. 37. iOS
  38. 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. 39. iOS Create a new Xcode project seçeneği ile yeni bir Xcode projesi olusturuyoruz.
  40. 40. iOS Single View Application seçeneği ile olusturacagımız projenin tipini belirliyoruz.
  41. 41. iOS
  42. 42. iOS Projeyi olusturdugumuz da olusan dosyaların genel görünümü
  43. 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. 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. 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.
  46. 46. iOS Storyboard, bizim uygulamamızın tasarımını gelistirdigimiz ve yönettigimiz kısımdır.
  47. 47. iOS Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
  48. 48. iOS Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
  49. 49. iOS Storyboard’ un içerisinde kullanabilecegimiz görsel komponentler;
  50. 50. iOS ViewController, uygulamamıza ekledigimiz ViewController’ların yönetilmesini saglayan sınıflardır. - (void) viewDidLoad ViewController’ın görünümü yüklendiginde bu metot calısmaktadır. - (void) didReceiveMemoryWarning Uygulama memory (hafıza) uyarısı verdiginde bu metot calısmaktadır.
  51. 51. iOS IBAction - IBOutlet /* ViewController.h */ @property (weak, nonatomic) IBOutlet UILabel *myLabel; - (IBAction)print: (id)sender; /* ViewController.m */ @synthesize myLabel; - (IBAction)print: (id)sender{ myLabel.text = @“CÜ Bilgisayar Mühendisligi”; }
  52. 52. iOS UITableView
  53. 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.
  54. 54. iOS UITableView /* ViewController.h */ @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> @property NSArray *myArray; @end /* ViewController.m */ @synthesize myArray; - (UITableViewCell *)tableView: (UITableView *)tableView: cellForRowAtIndexPath: (NSIndexPath *)indexPath{ static NSString *cellIdentifier = @“MyCell”; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier forIndexPath: indexPath]; cell.textLabel.text = [myArray objectAtIndex: indexPath.row]; return cell; }
  55. 55. iOS UITableView /* ViewController.m */ @synthesize myArray; - (NSInteger *)tableView: (UITableView *)tableView: numberOfRowsInSection: (NSInteger *)section{ return [myArray count]; } - (NSInteger *)numberOfSectionsInTableView: (UITableView *)tableView{ return 1; } - (void)viewDidLoad{ [super viewDidLoad]; myArray = [NSArray arrayWithObjects: @“İstanbul”, @“Sivas”, @“Ankara”, nil]; }
  56. 56. iOS UITableView
  57. 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. 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
  59. 59. iOS Changing ViewController Programmatically /* ViewController.m */ @interface ViewController (){ SecondViewController *secondViewController; } @end @implementation ViewController - (IBAction)changeController: (id)sender{ secondViewController = [self.storyboard instantiateViewControllerWithIdentifier: @“secondViewController”]; [self presentViewController: secondViewController animated: YES completion: nil]; } @end
  60. 60. iOS UIAlertView /* ViewController.m */ @implementation ViewController - (void)viewDidLoad{ [super viewDidLoad]; UIAlertView *alertView = [UIAlertView alloc]initWithTitle: @“CÜ Bilgisayar Mühendisligi” message: @“Anıl SÖZERİ” delegate: self cancelButtonTittle: @“Tamam” otherButtonTitles: nil]; [alertView show]; @end
  61. 61. iOS UIWebView /* InfoViewController.m */ @implementation ViewController @synthesize myWebView; - (void)viewDidLoad{ [super viewDidLoad]; NSURL *url = [NSURL alloc]initWithString: @“http:// www.cumhuriyet.edu.tr”]; NSURLRequest *request = [NSURLRequest alloc]initWithURL: url]; [myWebView loadRequest: request]; @end
  62. 62. iOS NSThread /* ViewController.m */ @implementation ViewController - (void)viewDidLoad{ [super viewDidLoad]; sleep(5); [NSThread sleepForTimeInterval: 5]; NSThread *thread = [NSThread alloc]initWithTarget: self selector: @selector(methodName) object: nil]; [thread start]; [thread cancel]; [thread isExecuting]; @end
  63. 63. iOS NSUserDefaults /* ViewController.h */ @interface ViewController : UIViewController @property NSUserDefaults *userInfo; @end /* ViewController.m */ @implementation ViewController @synthesize userInfo; - (void)viewDidLoad{ [super viewDidLoad]; userInfo = [NSUserDefaults standardUserDefaults]; @end NSUserDefaults sınıfı ile kullanıcı ile ilgili bilgileri tutabiliriz örnek vermemiz gerekirse kullanıcı adı ve sifre girilen bir uygulamada beni hatırla özelligi eklemek istersek bu sınıftan yararlanabiliriz.
  64. 64. iOS NSUserDefaults /* NSUserDefaults obje ekleme */ [userInfo setInteger: 2 forKey: @“dataCount”]; [userInfo setObject: className forKey: @“classInstance”]; [userInfo synchronize]; ! /* NSUserDefaults obje alma */ [userInfo objectForKey: @“classInstance”]; [userInfo integerForKey: @“dataCount”];
  65. 65. iOS NSNotificationCenter /* ViewController.m */ [[NSNotificationCenter defaultCenter] postNotificationName: @“notificationName” object: nil]; ! /* Olusturdugumuz bir NSDictionary ile parametre de aktarabiliriz. */ NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary]; [myDictionary setObject: data forKey: @“notificationData”]; [[NSNotificationCenter defaultCenter] postNotificationName: @“notificationName” object: nil userInfo: myDictionary]; NSNotificationCenter sınıfı ile baska sınıflarımıza data aktarımını saglayabiliriz. Notification’ı sınıfımızdan yolladıktan sonra sadece tetikletecegimiz sınıfta Notification’ı dinlememiz gerekmektedir.
  66. 66. iOS NSNotificationCenter /* AnotherViewController.m */ /* Notification’ı diger ViewController’ımızdan karsılıyoruz. */ [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(methodName) name: @“notificationName” object: nil]; ! /* userInfo ile gönderilen datayı karsılama */ - (returnType)methodName: (NSNotification *)notification{ NSDictionary *myDictionary = notification.userInfo; }
  67. 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. 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. 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
  70. 70. iOS NSXMLParser /* ViewController.m */ @implementation ViewController /* XML elementlerinin parse islemi basladıgında bu metot calısır. */ - (void)parser: (NSXMLParser *)parser didStartElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName attributes: (NSDictionary *)attributeDict; /* XML elementlerinin parse islemi bittiginde bu metot calısır. */ - (void)parser: (NSXMLParser *)parser didEndElement: (NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName: (NSString *)qName; /* XML elementlerinin parse isleminde karakterler bulundugunda bu metot calısır. */ - (void)parser: (NSXMLParser *)parser foundCharacters: (NSString *)string; @end
  71. 71. iOS Creating XML /* 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]; NSLog(@“%@”, [presence XMLString]); ! /* Ekran Çıktısı */ <presence> <status>Çevrimiçi</status> </presence>
  72. 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.
  73. 73. iOS Base64 Encode && Decode /* ViewController.h */ @interface ViewController : UIViewController - (NSString *)base64Encode: (NSString *)string; - (NSString *)base64Decode: (NSString *)string; @end /* ViewController.m */ @implementation ViewController - (void)viewDidLoad{ [super viewDidLoad]; NSString *name = @“Anıl SÖZERİ”; NSString *base64Name = [self base64Encode: name]; } @end
  74. 74. iOS Base64 Encode && Decode /* ViewController.m */ @implementation ViewController - (NSString *)base64Encode: (NSString *)string{ NSString *base64String = [[string dataUsingEncoding: NSUTF8StringEncoding] base64EncodedStringWithOptions:0]; return base64String; } - (NSString *)base64Decode: (NSString *)string{ NSData *decodedData = [[NSData alloc]initWithBase64EncodingString: string options: NSDataBase64DecodingIgnoreUnknownCharacters]; NSString *decodeString = [NSString alloc]initWithData: decodedData encoding: NSUTF8StringEncoding]; return decodeString; @end
  75. 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.
  76. 76. iOS NSJSONSerialization /* ViewController.h */ @interface ViewController : UIViewController @property NSMutableDictionary *JSONDictionary; @property NSData *JSONData; @property NSString *name; @property NSString *university; @end /* ViewController.m */ @implementation ViewController - (void)viewDidLoad{ [super viewDidLoad]; [self createJSONData]; [self getJSONData]; } @end
  77. 77. /* ViewController.m */ /* JSON Datası olusturmayı saglar. */ @implementation ViewController - (void)createJSONData{ [JSONDictionary setObject:@“Anıl SÖZERİ” forKey:@“name”]; [JSONDictionary setObject:@“Cumhuriyet Üniversitesi” forKey:@“university”]; NSError *error; JSONData = [NSJSONSerialization dataWithJSONObject: JSONObject options: 0 error: &error]; NSString *JSONString = [NSString alloc]initWithData: JSONData encoding: NSUTF8StringEncoding]; NSLog(@“JSON Data %@”, JSONString); } @end iOS NSJSONSerialization
  78. 78. /* ViewController.m */ /* Gelen JSON Datasına göre verileri çekmeyi saglar. */ @implementation ViewController - (void)getJSONData{ NSError *error; NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData: JSONData options: 0 error: &error]; name = (NSString *) [JSONDictionary valueForKey: @“name”]; university = (NSString *) [JSONDictionary valueForKey: @“university”]; NSLog(@“Name: %@”, name); NSLog(@“University: %@”, university); } @end iOS NSJSONSerialization
  79. 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. 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. 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;
  82. 82. iOS XMPPStream /* XMPPStream Sunucu Baglantısının Gerçeklestirilmesi */ NSError *error; ! if(![xmppStream connectWithTimeout: XMPPStreamTimeoutNone error: &error]){ NSLog(@“Baglantı Hatası”); return NO; } NSLog(@“Baglantı Saglandı.”); return YES; ! ! /* Baglantı Durumunun Ögrenilmesi */ ! if([xmppStream isConnected]){ /* Baglantı gerceklesti ise */ } ! if([xmppStream isDisconnected]){ /* Baglantı sonlandı ise */ }
  83. 83. iOS XMPPStream /* XMPPStream Sunucu Baglantısının Gerçeklestirilmesinin Ardından Kimlik Dogrulaması İslemi */ NSError *error; ! if(![xmppStream authenticateWithPassword: myPassword error: &error]){ NSLog(@“Kimlik Dogrulama Hatası”); return NO; } return YES; XMPPReconnect XMPPReconnect sınıfı, Baglantı kazara koptugunda yeniden baglantının gerceklesmesini saglayan XMPPFramework sınıfıdır. ! /* XMPPReconnect sınıfını aktif hale getirme. */ XMPPReconnect *xmppReconnect = [XMPPReconnect alloc]init]; [xmppReconnect activate:xmppStream];
  84. 84. iOS XMPPStream Delegate Methods /* Mesaj geldiginde tetiklenen delegate metodu */ - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{ /* Codes */ } ! /* Presence paketi geldiginde tetiklenen delegate metodu */ - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{ /* Codes */ } ! /* IQ (Info/Query) paketi geldiginde tetiklenen delegate metodu */ - (void)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{ /* Codes */ }
  85. 85. iOS XMPPStream Delegate Methods /* Baglantı saglandıgında tetiklenen delegate metodu */ - (void)xmppStreamDidConnect:(XMPPStream *)sender{ /* Codes */ } ! /* Baglantı sonlandıgında tetiklenen delegate metodu */ - (void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{ /* Codes */ } ! /* Kimlik Dogrulama islemi tamamlandıgında tetiklenen delegate metodu */ - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender{ /* Codes */ } ! /* Kimlik Dogrulama islemi tamamlanamadıgında tetiklenen delegate metodu */ - (void)xmppStreamDidNotAuthenticate:(NSXMLElement *)error{ /* Codes */ }
  86. 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. 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. 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];

Introduction to iOS Programming and About XMPPFramework

Vistos

Vistos totais

1.278

No Slideshare

0

De incorporações

0

Número de incorporações

58

Ações

Baixados

0

Compartilhados

0

Comentários

0

Curtir

0

×